将pd.Series传递给数据帧?

时间:2014-11-30 03:03:37

标签: python pandas

我尝试了以下代码,但new列仅包含NAN个值。

df['new'] = pd.Series(np.repeat(1, len(df)))

有人可以向我解释这里的问题是什么吗?

1 个答案:

答案 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非常有用。