我有 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,我仍然会害怕错误/糟糕的结果,因为导入时可能会发生一些错误的数据类型转换!?
如何克服和解决这个问题? 非常感谢
最佳答案
每当你遇到一个太无聊而无法手动完成的问题时,解决方案就是编写一个程序:
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 代码来选择和修复有问题的值。
关于python - 研究 Pandas DataFrame 中的不同数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24121983/