Python - 为什么eval在这个字符串/表达式上失败?

时间:2016-06-19 12:07:22

标签: python csv pandas eval

我在OS X 10.11.5上运行anaconda,并且正在努力访问pandas DataFrame中的数据。直接做它可以正常工作但是,当我尝试评估我通过迭代生成的字符串中的参数时,它会失败。这是一个更简单的版本,在没有迭代的情况下产生相同的问题。

直接访问 - 这很好用:

isChecked

这是一种尝试,将选择器生成为字符串,然后进行评估:

from pandas import *
df = read_csv('~/FutureLearn/Learn to Code for Data Analysis/WHO POP TB all.csv')

df1 = (df['Country'] == 'Brazil')    # Also works without ()
df1      # A pandas Series
df[df1]  # Accesses DataFrame OK

这会生成ValueError,我无法使用该表达式来访问DataFrame。为什么这个df1str = ("df['Country'] == 'Brazil'") eval(df1str) # ValueError: unknown type str224 - would have expected Series 不起作用?或者我必须做些什么才能使用字符串来访问DataFrame?

感谢您的帮助(就此而言,我的第一篇stackOverflow帖子)。

1 个答案:

答案 0 :(得分:0)

pandas.eval 返回系列,因此您想使用

lukas@crash:~/sandbox$ cat a.csv
a,b
1,2
lukas@crash:~/sandbox$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas
>>> pandas.__version__
'0.13.1'
>>> df = pandas.read_csv('a.csv')
>>> df1str = "df['a'] == '1'"
>>> df1 = pandas.eval(df1str)
>>> type(df1)
<class 'pandas.core.series.Series'>
>>>