我的代码将 CSV 文件读入 pandas DataFrame
- 并对其进行处理。该代码依赖于列名 - 使用 df.ix[,] 来获取列。最近 CSV 文件中的某些列名已更改(恕不另行通知)。但是代码并没有抱怨,而是默默地产生了错误的结果。ix[,] 构造不检查列是否存在。如果没有 - 它只是创建它并用 NaN 填充。这是正在发生的事情的主要思想。
df1=DataFrame({'a':[1,2,3],'b':[4,5,6]}) # columns 'a' & 'b'
df2=df1.ix[:,['a','c']] # trying to get 'a' & 'c'
print df2
a c
0 1 NaN
1 2 NaN
2 3 NaN
所以它不会产生错误或警告。
是否有另一种方法来选择特定列并额外检查列是否存在?
我目前的解决方法是使用我自己的小型实用程序函数,如下所示:
import sys, inspect
def validate_cols_or_exit(df,cols):
"""
Exits with error message if pandas DataFrame object df
doesn't have all columns from the provided list of columns
Example of usage:
validate_cols_or_exit(mydf,['col1','col2'])
"""
dfcols = list(df.columns)
valid_flag = True
for c in cols:
if c not in dfcols:
print "Error, non-existent DataFrame column found - ",c
valid_flag = False
if not valid_flag:
print "Error, non-existent DataFrame column(s) found in function ", inspect.stack()[1][3]
print "valid column names are:"
print "\n".join(df.columns)
sys.exit(1)