Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用pandas过滤数据_Python_Csv_Filter_Pandas - Fatal编程技术网

Python 用pandas过滤数据

Python 用pandas过滤数据,python,csv,filter,pandas,Python,Csv,Filter,Pandas,我是熊猫的新手,我正在尝试将它应用到我已经写过的脚本中。 我有一个csv文件,从中提取数据,并使用“候选”、“最终曲目”和“状态”列作为数据框 我的问题是,我想使用Wes Mckinney的10分钟教程(“”)中所示的方法过滤数据。在[80]的部分中:他使用aapl\u条。收盘价['2009-10-15'] 我想使用类似的方法选择所有状态为*的数据。如果行中没有*,则其他列中的数据也将被删除 当前我的代码: def establish_current_tacks(filename):

我是熊猫的新手,我正在尝试将它应用到我已经写过的脚本中。 我有一个csv文件,从中提取数据,并使用“候选”、“最终曲目”和“状态”列作为数据框

我的问题是,我想使用Wes Mckinney的10分钟教程(“”)中所示的方法过滤数据。在[80]的
部分中:
他使用
aapl\u条。收盘价['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
我的数据帧

>>> 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)
>>当前曲目
INT64索引:707个条目,从0到706
数据列(共3列):
候选695个非空值
最终曲目670非空值
状态670非空值
数据类型:float64(1),object(2)
我想使用诸如
current\u tracks.status['*']
之类的工具,但这不起作用


如果这是显而易见的,我深表歉意。由于您要基于的数据不是数据框索引的一部分,而是一个常规列,因此您需要执行以下操作:

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

谢谢@Marius,我正在尝试使用第二个
set\u索引部分。我得到了错误
KeyError:u'no item named status'
查看您的数据帧,它看起来像
'status'
列实际上被命名为
'status'
,并带有前导空格。也许你觉得很有趣?尝试显式重命名列(
current_tracks.columns=['candidate','final_track','status']
),看看它是否有效。当您在读取csv后过滤COL时,在调用
read_csv
时进行过滤会更有效,就像这样
df=read_csv(文件名,usecols=[0,10,11])
或者你可以传递一个列名列表
df=read\u csv(文件名,usecols=['candidate','final track','status'])
它将加载很多快速计分卡。我有两个问题,1。你解释的两种方法不会产生相同的结果?(第一种方法给出了我想要的结果)。2。)你如何使用列名对这些列进行索引?我假设列名与你的输出相同,可能不是,这可以解释1。第二个代码段是正确的语法和形式,但由于某些原因,它没有产生与您需要了解的结果相同的结果,您可以阅读有关参数的更多信息