如果您对如何将现有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 列的子字符串比较两个 Dataframe
- Pandas DataFrame使用另一个DataFrame列过滤行
- Pandas DataFrame,如何删除总和为0的所有列和行
- 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
可以只将数字列清零。如果您有混合的dtype
DataFrame,这可能就是您想要的,但是,如果您的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
。但是,如果一列是int
或object
,似乎新的dtypes
意愿 都 可以int
。
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列过滤行
我会做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的合并答案,但是代码更多,但也许更直接。
您只需:
- 合并该列并创建新的数据框
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) }
- 根据条件(在本例中为
s
),将数据名人 - 最后,将
s['col3'] >= s['col2']
传递给s
,结果将排除布尔系列df1
中返回False
的行:
s
更改为返回True
或False
的布尔系列。
s
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:根据条件替换列中的所有值
我有一个简单的 DataFrame,如下所示:
我想从“第一季”列中选择所有值,并将超过 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:根据条件替换列中的所有值的相关知识,请在本站寻找。
本文标签: