考虑使用数据框df
和系列s
import pandas as pd
matching_vals = range(20,30)
df = pd.DataFrame(columns=['a'], index=range(0,10))
df['a'] = matching_vals
s = pd.Series(list("ABCDEFGHIJ"), index=matching_vals)
df['b'] = s[df['a']]
此时我希望df['b']
包含字母A
到J
,而是全部NaN
。但是,如果我用
n = df['a'][2]
df['c'] = s[n]
然后df['c']
充满了C
s,正如我所料,所以我很确定这不是一个奇怪的类型错误。
我是熊猫的新手,这让我发疯了。
答案 0 :(得分:3)
s[df['a']]
的索引与df
的索引不同:
In [104]: s[df['a']]
Out[104]:
a
20 A
21 B
22 C
23 D
24 E
25 F
26 G
27 H
28 I
29 J
当您将Series分配给DataFrame的列时,Pandas会尝试根据索引分配值。由于s[df['a']]
没有与df
的索引关联的任何值,因此会分配NaN
个值。该分配不会向df
添加新行。
如果您不希望索引进入作业,则可以使用
df['b'] = s[df['a']].values
有关索引匹配的演示,请注意
import pandas as pd
df = pd.DataFrame(columns=['a'], index=range(0,10))
df['a'] = range(0,10)[::-1]
s = pd.Series(list("ABCDEFGHIJ"), index=range(0,10)[::-1])
df['b'] = s[df['a']]
产量
In [123]: s[df['a']]
Out[123]:
a
9 A
8 B
7 C
6 D
5 E
4 F
3 G
2 H
1 I
0 J
dtype: object
In [124]: df
Out[124]:
a b
0 9 J
1 8 I
2 7 H
3 6 G
4 5 F
5 4 E
6 3 D
7 2 C
8 1 B
9 0 A
[10 rows x 2 columns]
“翻转”df['b']
的值以使索引匹配。