为什么 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