我尝试了以下代码,但new
列仅包含NAN
个值。
df['new'] = pd.Series(np.repeat(1, len(df)))
有人可以向我解释这里的问题是什么吗?
答案 0 :(得分:1)
DataFrame df
的索引可能与新创建的Series'不匹配。例如,
import pandas as pd
import numpy as np
df = pd.DataFrame({'a': [11, 22, 33, 44, 55]}, index=['r1','r2','r3','r4','r5'])
df['new'] = pd.Series(np.repeat(1, len(df)))
print df
,输出结果为:
a new
r1 11 NaN
r2 22 NaN
r3 33 NaN
r4 44 NaN
r5 55 NaN
因为pd.Series(np.repeat(1, len(df)))
的索引是Int64Index([0, 1, 2, 3, 4], dtype='int64')
。
要防止这种情况,请在创建Series时指定index参数:
df['new'] = pd.Series(np.repeat(1, len(df)), index=df.index)
或者,如果要忽略索引,则可以传递一个numpy数组:
df['new'] = np.repeat(1, len(df))
无需创建系列(事实上,df['new'] = 1
将针对此情况执行此操作)。当您需要使用索引将新列与现有DataFrame对齐时,使用Series非常有用。