我有一个数据框架,我正在做大量(20+)的计算,创建新列等。所有的计算都运行良好,包括问题中的计算,除了大约1,000行的2行。行不是相邻的,我找不到任何值得注意的关于这两个特定的行,计算似乎跳过。正在从csv和xlsx文件中读取数据。问题行来自csv文件中的数据。
计算如下:
df['c'] = df['b'] - df['a']
两个问题行的数据如下所示:
['a'] ['b'] ['c']
0 30.6427984591421 0
0 9584.28792256921 0
df中其余部分的数据看起来很相似,但处理正确:
['a'] ['b'] ['c']
102411.4521 37008.6603 -65402.7918
202244.75895 211200.2304295 8955.4714795
示例代码:
a = [0, 0, 102411.4521, 202244.75895]
b = [30.6427984591421, 9584.28792256921, 37008.6603, 211200.2304295]
df = pd.DataFrame(zip(a, b), columns=['a', 'b'])
df['c'] = df['b'] - df['a']
为什么计算似乎会跳过这些行?
您可以在操作之前尝试重置索引。
df = df.reset_index(drop=True)
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.reset_index.html pandas-dataframe-reset-index
根据您提供的信息,cPython 3.10.8不会重现此错误。
import pandas as pd
df = pd.DataFrame(
[
dict(a=0, b= 30.6427984591421),
dict(a=0, b= 9584.28792256921),
dict(a=102411.4521, b= 37008.6603),
dict(a=202244.75895, b=211200.2304295),
]
)
df["c"] = df.b - df.a
print(pd.__version__)
print(df)
输出1.5.2
a b c
0 0.00000 30.642798 30.642798
1 0.00000 9584.287923 9584.287923
2 102411.45210 37008.660300 -65402.791800
3 202244.75895 211200.230429 8955.471480
问题是我需要在计算之前填写:
df = df.fillna(0, inplace=False)