为什么 pandas DataFrame 的一列不能被填充?
Why can one column of the pandas DataFrame not be filled?
我在用两种不同类型的值迭代填充 pandas DataFrame 时遇到了一些问题。作为一个简单的例子,请考虑以下初始化:
输入:
df = pd.DataFrame(data=np.nan,
index=range(5),
columns=['date', 'price'])
df
输出:
date price
0 NaN NaN
1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
当我尝试填充 DataFrame 的一行时,它不会调整 date
列中的值。示例:
输入:
df.iloc[0]['date'] = '2022-05-06'
df.iloc[0]['price'] = 100
df
输出:
date price
0 NaN 100.0
1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
我怀疑这与默认 np.nan
值不能被 str
类型值替换这一事实有关,但我不确定如何解决它。请注意,将 date
列的类型更改为 str
似乎没有什么不同。
这不起作用,因为 df.iloc[0]
创建了一个临时系列,这是您更新的内容,而不是原始 DataFrame。
如果您需要混合使用位置索引和标签索引,您可以使用:
df.loc[df.index[0], 'date'] = '2022-05-06'
df.loc[df.index[0], 'price'] = 100
输出:
date price
0 2022-05-06 100.0
1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
使用如下所示的 loc()
可能效果更好:
import pandas as pd
import numpy as np
df = pd.DataFrame(data=np.nan,
index=range(5),
columns=['date', 'price'])
print(df)
df.loc[0, 'date'] = '2022-05-06'
df.loc[0, 'price'] = 100
print(df)
输出:
date price
0 NaN NaN
1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
date price
0 2022-05-06 100.0
1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
我在用两种不同类型的值迭代填充 pandas DataFrame 时遇到了一些问题。作为一个简单的例子,请考虑以下初始化:
输入:
df = pd.DataFrame(data=np.nan,
index=range(5),
columns=['date', 'price'])
df
输出:
date price
0 NaN NaN
1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
当我尝试填充 DataFrame 的一行时,它不会调整 date
列中的值。示例:
输入:
df.iloc[0]['date'] = '2022-05-06'
df.iloc[0]['price'] = 100
df
输出:
date price
0 NaN 100.0
1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
我怀疑这与默认 np.nan
值不能被 str
类型值替换这一事实有关,但我不确定如何解决它。请注意,将 date
列的类型更改为 str
似乎没有什么不同。
这不起作用,因为 df.iloc[0]
创建了一个临时系列,这是您更新的内容,而不是原始 DataFrame。
如果您需要混合使用位置索引和标签索引,您可以使用:
df.loc[df.index[0], 'date'] = '2022-05-06'
df.loc[df.index[0], 'price'] = 100
输出:
date price
0 2022-05-06 100.0
1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
使用如下所示的 loc()
可能效果更好:
import pandas as pd
import numpy as np
df = pd.DataFrame(data=np.nan,
index=range(5),
columns=['date', 'price'])
print(df)
df.loc[0, 'date'] = '2022-05-06'
df.loc[0, 'price'] = 100
print(df)
输出:
date price
0 NaN NaN
1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
date price
0 2022-05-06 100.0
1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN