Joh*_*ker 4 python series dataframe pandas
考虑一个带有 Dataframedf和 Series的简单示例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']]
Run Code Online (Sandbox Code Playgroud)
在这一点上我希望df['b']到包含字母A通过J,而是它的所有NaN。但是,如果我用
n = df['a'][2]
df['c'] = s[n]
Run Code Online (Sandbox Code Playgroud)
thendf['c']充满了Cs,正如我所料,所以我很确定这不是一些奇怪的类型错误。
我是大熊猫的新手,这让我发疯了。
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
Run Code Online (Sandbox Code Playgroud)
当您将 Series 分配给 DataFrame 的列时,Pandas 会尝试根据索引分配值。由于s[df['a']]没有与 的索引相关联的任何值df,NaN因此分配了值。分配不会向 中添加新行df。
如果您不希望索引进入作业,您可以使用
df['b'] = s[df['a']].values
Run Code Online (Sandbox Code Playgroud)
对于索引匹配的演示,请注意如何
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']]
Run Code Online (Sandbox Code Playgroud)
产量
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]
Run Code Online (Sandbox Code Playgroud)
的值df['b']被“翻转”以使索引匹配。