Ali*_*n S 20 python dataframe pandas
我正在使用python 2.7.3和Pandas版本0.12.0.
我想删除带有NaN索引的行,以便我只有有效的site_id值.
print df.head()
special_name
site_id
NaN Banana
OMG Apple
df.drop(df.index[0])
TypeError: 'NoneType' object is not iterable
Run Code Online (Sandbox Code Playgroud)
如果我尝试删除范围,如下所示:
df.drop(df.index[0:1])
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
AttributeError: 'DataFrame' object has no attribute 'special_name'
Run Code Online (Sandbox Code Playgroud)
tim*_*els 27
使用pandas version> = 0.20.0,您可以:
df[df.index.notnull()]
使用旧版本:
df[pandas.notnull(df.index)]
要打破它:
notnull生成一个布尔掩码,例如[False, False, True],其中True表示相应位置的值为null(numpy.nan或None).然后,我们通过使用选择其索引对应于掩码中的真值的行df[boolean_mask].
Tom*_*ger 17
我发现最简单的方法是重置索引,删除NaN,然后再次重置索引.
In [26]: dfA.reset_index()
Out[26]:
index special_name
0 NaN Apple
1 OMG Banana
In [30]: df = dfA.reset_index().dropna().set_index('index')
In [31]: df
Out[31]:
special_name
index
OMG Banana
Run Code Online (Sandbox Code Playgroud)
没有一个答案对我来说 100% 有效。这是有效的:
In [26]: print df
Out[26]:
site_id special_name
0 OMG Apple
1 NaN Banana
2 RLY Orange
In [27]: df.dropna(inplace=True)
Out[27]:
site_id special_name
0 OMG Apple
2 RLY Orange
In [28]: df.reset_index(inplace=True)
Out[28]:
index site_id special_name
0 0 OMG Apple
1 2 RLY Orange
In [29]: df.drop('index', axis='columns', inplace=True)
Out[29]:
site_id special_name
0 OMG Apple
1 RLY Orange
Run Code Online (Sandbox Code Playgroud)
从pandas0.19开始,Indexes确实有一个方法,所以timdiels.notnull()的答案可以简化为:
df[df.index.notnull()]
Run Code Online (Sandbox Code Playgroud)
我认为(目前)这是你能得到的最简单的。
| 归档时间: |
|
| 查看次数: |
19629 次 |
| 最近记录: |