我有以下DataFrame:
daysago line_race rating rw wrating
line_date
2007-03-31 62 11 56 1.000000 56.000000
2007-03-10 83 11 67 1.000000 67.000000
2007-02-10 111 9 66 1.000000 66.000000
2007-01-13 139 10 83 0.880678 73.096278
2006-12-23 160 10 88 0.793033 69.786942
2006-11-09 204 9 52 0.636655 33.106077
2006-10-22 222 8 66 0.581946 38.408408
2006-09-29 245 9 70 0.518825 36.317752
2006-09-16 258 11 68 0.486226 33.063381
2006-08-30 275 8 72 0.446667 32.160051
2006-02-11 475 5 65 0.164591 10.698423
2006-01-13 504 0 70 0.142409 9.968634
2006-01-02 …Run Code Online (Sandbox Code Playgroud) 与此问题类似如何向数据框添加空列?,我有兴趣知道将一列空列表添加到DataFrame的最佳方法.
我要做的是基本上初始化一个列,当我遍历行来处理其中的一些时,然后在这个新列中添加一个填充列表来替换初始化值.
例如,如果以下是我的初始DataFrame:
df = pd.DataFrame(d = {'a': [1,2,3], 'b': [5,6,7]}) # Sample DataFrame
>>> df
a b
0 1 5
1 2 6
2 3 7
Run Code Online (Sandbox Code Playgroud)
然后我想最终得到类似的东西,其中每一行都已单独处理(显示的样本结果):
>>> df
a b c
0 1 5 [5, 6]
1 2 6 [9, 0]
2 3 7 [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
当然,如果我尝试像df['e'] = []任何其他常量一样初始化,它认为我试图添加长度为0的项目序列,因此失败.
如果我尝试将新列初始化为None或NaN,则在尝试将列表分配给某个位置时会遇到以下问题.
df['d'] = None
>>> df
a b d
0 1 5 None
1 2 6 None
2 3 7 …Run Code Online (Sandbox Code Playgroud) 当按位置访问一行时,Pandas 有没有办法获得默认值?我知道该.get()功能,但在按索引搜索时有效。
下面是我想要做的。数据框:
In [24]: df
Out[24]:
col1
idx
20 A
21 B
22 C
23 D
24 E
Run Code Online (Sandbox Code Playgroud)
按索引搜索并获取默认值工作正常:
In [25]: df['col1'].get(23, 'the_default_value')
Out[25]: 'D'
In [26]: df['col1'].get(28, 'the_default_value')
Out[26]: 'the_default_value'
Run Code Online (Sandbox Code Playgroud)
但是似乎没有按位置搜索的等效方法。我可以使用.iloc(),但如果该行不存在,它无助于获取默认值。例如。
In [57]: df['col1'].iloc[2]
Out[57]: 'C'
In [58]: df['col1'].iloc[6]
...
IndexError: single positional indexer is out-of-bounds
Run Code Online (Sandbox Code Playgroud)
我可以使用 来设置它try...except,或者事先检查该值是否存在,但是有没有更简洁的方法,比如.iget()(比如.locvs .iloc)?