我有4个文件,我想用Python / Pandas阅读,文件是:https://github.com/kelsey9649/CS8370Group/tree/master/TaFengDataSet 我在所有4个文件中删除了第一行(中文列标题)。 但除此之外,4个文件应该具有相同的格式。
现在我想阅读它们并合并到一个大的DataFrame中。我尝试使用
pars = {'sep': ';',
'header': None,
'names': ['date','customer_id','age','area','prod_class','prod_id','amount','asset','price'],
'parse_dates': [0]}
df = pd.DataFrame()
for i in ('01', '02', '12', '11'):
df = df.append(pd.read_csv(cfg.abspath+'D'+i,**pars))
但是:文件D11为我提供了不同格式的单列,因此无法正确合并。该文件包含超过200k行,因此我不能轻易地在该文件中查找问题,但如上所述,我假设它具有相同的格式,但显然格式有一些小差异。
现在调查问题的最简单方法是什么?显然,我无法检查该文件中的每一行......
当我读取3个工作文件并合并它们时;独立阅读D11,
行A = pd.read_csv(cfg.abspath+'D11',**pars)
仍然给我以下警告:
C:\Python27\lib\site-packages\pandas\io\parsers.py:1130: DtypeWarning: Columns (
1,4,5,6,7,8) have mixed types. Specify dtype option on import or set low_memory=
False.
data = self._reader.read(nrows)
在pandas(.info()
和A
)中使用df
方法产生:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 594119 entries, 0 to 178215
Data columns (total 9 columns):
date 594119 non-null datetime64[ns]
customer_id 594119 non-null int64
age 594119 non-null object
area 594119 non-null object
prod_class 594119 non-null int64
prod_id 594119 non-null int64
amount 594119 non-null int64
asset 594119 non-null int64
price 594119 non-null int64
dtypes: datetime64[ns](1), int64(6), object(2)
<class 'pandas.core.frame.DataFrame'>
Int64Index: 223623 entries, 0 to 223622
Data columns (total 9 columns):
date 223623 non-null object
customer_id 223623 non-null object
age 223623 non-null object
area 223623 non-null object
prod_class 223623 non-null object
prod_id 223623 non-null object
amount 223623 non-null object
asset 223623 non-null object
price 223623 non-null object
即使我在导入时使用dtype-option,我仍然会以某种方式害怕错误/错误的结果,因为在导入时可能会发生一些错误的数据类型转换!?
如何克服并解决问题? 非常感谢
答案 0 :(得分:2)
每当你遇到一个太无聊而无法手工完成的问题时,解决办法就是写一个程序:
for col in ('age', 'area'):
for i, val in enumerate(A[col]):
try:
int(val)
except:
print('Line {}: {} = {}'.format(i, col, val))
这将显示文件中age
和area
列中包含非整数值的所有行。这是调试问题的第一步。一旦你知道有问题的值是什么,你可以更好地决定如何处理它们 - 可能通过预处理(清理)数据文件,或通过使用一些pandas代码来选择和修复有问题的值。