将数据帧转换为系列会创建NA

时间:2017-04-03 14:14:10

标签: python python-2.7 pandas

我已下载数据框并尝试从此DataFrame创建pd.Series

data = pd.read_csv(filepath_or_buffer = "train.csv", index_col = 0)
data.columns

Index([u'qid1',u'qid2',u'question1',u'question2'], dtype = 'object')

以下是DataFrame中的列,qid1question1的ID,qid2question2的ID 此外,我的DataFrame中没有Nan

data.question1.isnull().sum()
0

我想从qid1作为索引的第一个问题创建pandas.Series():

question1 = pd.Series(data.question1, index = data.qid1)
question1.isnull.sum()
68416

现在,我的系列中有68416个Null值。我的错误在哪里?

1 个答案:

答案 0 :(得分:3)

传递匿名值,以便Series ctor不会尝试对齐:

question1 = pd.Series(data.question1.values, index = data.qid1)

这里的问题是question1列有它自己的索引所以它会在构造过程中尝试使用它

示例:

In [12]:
df = pd.DataFrame({'a':np.arange(5), 'b':list('abcde')})
df

Out[12]:
   a  b
0  0  a
1  1  b
2  2  c
3  3  d
4  4  e

In [13]:
s = pd.Series(df['a'], index = df['b'])
s

Out[13]:
b
a   NaN
b   NaN
c   NaN
d   NaN
e   NaN
Name: a, dtype: float64

In [14]:
s = pd.Series(df['a'].values, index = df['b'])
s

Out[14]:
b
a    0
b    1
c    2
d    3
e    4
dtype: int32

这里有效的是你使用传入的新索引重新索引现有列,因为没有与你匹配的索引值NaN