我是Pandas的新手,我正在尝试将它应用到我已经写过的脚本中。 我有一个csv文件,我从中提取数据,并使用列'候选','最终曲目'和'状态'我的数据框。
我的问题是,我想使用Wes Mckinney的10分钟教程('http://nbviewer.ipython.org/urls/gist.github.com/wesm/4757075/raw/a72d3450ad4924d0e74fb57c9f62d1d895ea4574/PandasTour.ipynb')中显示的方法过滤数据。在In [80]:
部分,他使用aapl_bars.close_price['2009-10-15']
。
我想使用类似的方法来选择*
作为状态的所有数据。如果该行中没有*,则也会删除其他列中的数据。
我的代码目前:
def establish_current_tacks(filename):
df=pd.read_csv(filename)
cols=[df.iloc[:,0], df.iloc[:,10], df.iloc[:,11]]
current_tracks=pd.concat(cols, axis=1)
return current_tracks
我的 DataFrame :
>>> current_tracks
<class 'pandas.core.frame.DataFrame'>
Int64Index: 707 entries, 0 to 706
Data columns (total 3 columns):
candidate 695 non-null values
final track 670 non-null values
status 670 non-null values
dtypes: float64(1), object(2)
我想使用诸如current_tracks.status['*']
之类的东西,但这不起作用
如果这是显而易见的道歉,请稍微挣扎以解决问题。
答案 0 :(得分:2)
由于您要基于的数据不是数据框索引的一部分,而是常规列,您需要执行以下操作:
current_tracks[current_tracks.status == '*']
完整示例:
import pandas as pd
current_tracks = pd.DataFrame({'candidate': ['Bob', 'Jim', 'Alice'],
'final_track': [10, 15, 13], 'status': ['*', '.', '*']})
current_tracks
Out[3]:
candidate final_track status
0 Bob 10 *
1 Jim 15 .
2 Alice 13 *
current_tracks[current_tracks.status == '*']
Out[4]:
candidate final_track status
0 Bob 10 *
2 Alice 13 *
如果status
是您的数据框索引的一部分,那么您的原始语法就会起作用:
current_tracks = current_tracks.set_index('status')
current_tracks.candidate['*']
Out[8]:
status
* Bob
* Alice
Name: candidate, dtype: object