www.91084.com

GVKun编程网logo

如何将现有Pandas DataFrame的所有值设置为零?(pandas dataframe修改值)

12

如果您对如何将现有PandasDataFrame的所有值设置为零?和pandasdataframe修改值感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解如何将现有PandasDataFrame的

如果您对如何将现有Pandas DataFrame的所有值设置为零?pandas dataframe修改值感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解如何将现有Pandas DataFrame的所有值设置为零?的各种细节,并对pandas dataframe修改值进行深入的分析,此外还有关于Pandas - 使用一个 Dataframe 列的子字符串比较两个 Dataframe、Pandas DataFrame使用另一个DataFrame列过滤行、Pandas DataFrame,如何删除总和为0的所有列和行、Pandas DataFrame:根据条件替换列中的所有值的实用技巧。

本文目录一览:

如何将现有Pandas DataFrame的所有值设置为零?(pandas dataframe修改值)

如何将现有Pandas DataFrame的所有值设置为零?(pandas dataframe修改值)

我目前有一个带有日期索引的现有Pandas DataFrame,每个列都有一个特定的名称。

对于数据单元,它们充满了各种浮点值。

我想复制我的DataFrame,但将所有这些值替换为零。

目的是重用DataFrame的结构(尺寸,索引,列名),但通过将其替换为零来清除所有当前值。

我目前实现此目标的方式如下:

df[df > 0] = 0

但是,这不会替换DataFrame中的任何负值。

是否存在一种更通用的方法来用单个公共值填充整个现有DataFrame?

预先感谢您的帮助。

答案1

小编典典

也可以保留的绝对最快的方法dtypes如下:

for col in df.columns:    df[col].values[:] = 0

这将直接写入每个列的基础numpy数组。我怀疑其他任何方法都不会比这更快,因为这不会分配额外的存储空间并且不会通过熊猫的dtype处理。您也np.issubdtype可以只将数字列清零。如果您有混合的dtypeDataFrame,这可能就是您想要的,但是,如果您的DataFrame已经是完全数字的,那么这当然不是必需的。

for col in df.columns:    if np.issubdtype(df[col].dtype, np.number):        df[col].values[:] = 0

对于小型DataFrame,子类型检查会花费一些成本。但是,将非数字列清零的成本非常高,因此,如果不确定DataFrame是否完全为数字,则可能应包括issubdtype检查。


时序比较

设定

import pandas as pdimport numpy as npdef make_df(n, only_numeric):    series = [        pd.Series(range(n), name="int", dtype=int),        pd.Series(range(n), name="float", dtype=float),    ]    if only_numeric:        series.extend(            [                pd.Series(range(n, 2 * n), name="int2", dtype=int),                pd.Series(range(n, 2 * n), name="float2", dtype=float),            ]        )    else:        series.extend(            [                pd.date_range(start="1970-1-1", freq="T", periods=n, name="dt")                .to_series()                .reset_index(drop=True),                pd.Series(                    [chr((i % 26) + 65) for i in range(n)],                    name="string",                    dtype="object",                ),            ]        )    return pd.concat(series, axis=1)

>>> make_df(5, True)   int  float  int2  float20    0    0.0     5     5.01    1    1.0     6     6.02    2    2.0     7     7.03    3    3.0     8     8.04    4    4.0     9     9.0>>> make_df(5, False)   int  float                  dt string0    0    0.0 1970-01-01 00:00:00      A1    1    1.0 1970-01-01 00:01:00      B2    2    2.0 1970-01-01 00:02:00      C3    3    3.0 1970-01-01 00:03:00      D4    4    4.0 1970-01-01 00:04:00      E

小数据框

n = 10_000# Numeric df, no issubdtype check%%timeit df = make_df(n, True)for col in df.columns:    df[col].values[:] = 036.1 µs ± 510 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)# Numeric df, yes issubdtype check%%timeit df = make_df(n, True)for col in df.columns:    if np.issubdtype(df[col].dtype, np.number):        df[col].values[:] = 053 µs ± 645 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)# Non-numeric df, no issubdtype check%%timeit df = make_df(n, False)for col in df.columns:    df[col].values[:] = 0113 µs ± 391 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)# Non-numeric df, yes issubdtype check%%timeit df = make_df(n, False)for col in df.columns:    if np.issubdtype(df[col].dtype, np.number):        df[col].values[:] = 039.4 µs ± 1.91 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

大数据框

n = 10_000_000# Numeric df, no issubdtype check%%timeit df = make_df(n, True)for col in df.columns:    df[col].values[:] = 038.7 ms ± 151 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)# Numeric df, yes issubdtype check%%timeit df = make_df(n, True)for col in df.columns:    if np.issubdtype(df[col].dtype, np.number):        df[col].values[:] = 039.1 ms ± 556 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)# Non-numeric df, no issubdtype check%%timeit df = make_df(n, False)for col in df.columns:    df[col].values[:] = 099.5 ms ± 748 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)# Non-numeric df, yes issubdtype check%%timeit df = make_df(n, False)for col in df.columns:    if np.issubdtype(df[col].dtype, np.number):        df[col].values[:] = 017.8 ms ± 228 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

我之前曾建议过以下答案,但现在我认为这是有害的-它比上述答案慢得多,也很难推理。 它唯一的优点是写得更好。

最干净的方法是使用裸冒号引用整个数据框。

df[:] = 0

不幸的是,dtype情况有点模糊,因为结果数据帧中的每一列都将具有相同的值dtype。如果的每一列df都是原来的float,则新列dtypes仍然是
float。但是,如果一列是intobject,似乎新的dtypes意愿 可以int

Pandas - 使用一个 Dataframe 列的子字符串比较两个 Dataframe

Pandas - 使用一个 Dataframe 列的子字符串比较两个 Dataframe

我能够使用下面的方法获得所需的输出

df1.merge(df2,left_on = df2.prod_ref.str.extract(''(\d+)'',expand = False),right_on = df1.prod_id.str.extract(''(\d+)'',how = ''left'')

Pandas DataFrame使用另一个DataFrame列过滤行

Pandas DataFrame使用另一个DataFrame列过滤行

我会做merge

out = df1.merge(df2[['col1','col2']],on = 'col1',suffixes = ('','1')).query('col3>=col21').drop('col21',1)

out
Out[15]: 
  col1  col2  col3  col4
1    A     2  0.80   200
2    A     2  0.90   300
3    A     3  0.95   400
4    A     3  0.85   500
5    B     2  0.65   600
6    B     2  0.75   700
9    B     3  0.75  1000

reindex

out = df1[df1['col3'] >= df2.set_index('col1')['col2'].reindex(df1['col1']).values]
Out[19]: 
  col1  col2  col3  col4
1    A     2  0.80   200
2    A     2  0.90   300
3    A     3  0.95   400
4    A     3  0.85   500
5    B     2  0.65   600
6    B     2  0.75   700
9    B     3  0.75  1000

您还可以使用map

 df1.loc[df1.col3 >= df1.col1.map(df2.set_index("col1").col2)]
,

我的方法类似于@Ben_Yo的合并答案,但是代码更多,但也许更直接。

您只需:

  1. 合并该列并创建新的数据框 ZStack{ Rectangle() .frame(width: geometry.size.width,height: geometry.size.height/3.25) .shadow(radius: 5) .foregroundColor(Color.white) //Words ontop of the Rectangle VStack { HStack { Spacer() Text("Hello World") }.padding(.trailing,40) Spacer() //<-- PROBLEM HERE }//.offset(y: -40) }
  2. 根据条件(在本例中为s
  3. ),将数据名人s更改为返回TrueFalse的布尔系列。
  4. 最后,将s['col3'] >= s['col2']传递给s,结果将排除布尔系列df1中返回False的行:

s

Pandas DataFrame,如何删除总和为0的所有列和行

Pandas DataFrame,如何删除总和为0的所有列和行

我有一个dataFrame,行和列的总和为0。

    A   B   C    D0   1   1   0    11   0   0   0    0 2   1   0   0    13   0   1   0    0  4   1   1   0    1

最终结果应该是

    A   B    D0   1   1    12   1   0    13   0   1    0  4   1   1    1

注意只有零的行和列已被删除。

答案1

小编典典

df.loc[row_indexer, column_indexer] 允许您使用布尔掩码选择行和列:

In [88]: df.loc[(df.sum(axis=1) != 0), (df.sum(axis=0) != 0)]Out[88]:    A  B  D0  1  1  12  1  0  13  0  1  04  1  1  1[4 rows x 3 columns]

df.sum(axis=1) != 0 当且仅当行的总和不为0时,才为True。

df.sum(axis=0) != 0 当且仅当列的总和不为0时,才为True。

Pandas DataFrame:根据条件替换列中的所有值

Pandas DataFrame:根据条件替换列中的所有值

我有一个简单的 DataFrame,如下所示:

pandas数据框

我想从“第一季”列中选择所有值,并将超过 1990 年的值替换为 1。在此示例中,只有巴尔的摩乌鸦队将 1996 年替换为 1(保持其余数据不变)。

我使用了以下内容:

df.loc[(df['First Season'] > 1990)] = 1

但是,它将该行中的所有值替换为 1,而不仅仅是“第一季”列中的值。

如何仅替换该列中的值?

关于如何将现有Pandas DataFrame的所有值设置为零?pandas dataframe修改值的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于Pandas - 使用一个 Dataframe 列的子字符串比较两个 Dataframe、Pandas DataFrame使用另一个DataFrame列过滤行、Pandas DataFrame,如何删除总和为0的所有列和行、Pandas DataFrame:根据条件替换列中的所有值的相关知识,请在本站寻找。

本文标签: