我有一个大的CSV文件,我需要操纵与熊猫。阅读documentation,我发现选择engine='c'
可以帮助加快进程。文档指出,要使用此功能,必须声明数据类型。所以这是我的第一次尝试:
data_types = {
'AccountNumber': object,
'AccountName': object,
'StatsDate': datetime,
'InvoiceDate': datetime,
'Product': object,
'LineItem': object,
'Charges': np.float64
}
df = pd.read_csv('accounting_worksheet.csv',
engine='c',
dtype=data_types,
encoding='utf-8')
然而,熊猫不认识被声明为datetime的项目:
^{pr2}$所以在StackOverflow上翻了一番,我发现twoposts似乎很有用,于是尝试了以下方法:
import datetime
def parse_dates(x):
return datetime.strptime(x,'%m/%d/%Y')
data_types = {
'AccountNumber': object,
'AccountName': object,
'StatsDate': datetime,
'InvoiceDate': datetime,
'Product': object,
'LineItem': object,
'Charges': np.float64
}
df = pd.read_csv('accounting_worksheet.csv',
engine='c',
dtype=data_types,
parse_dates=['StatsDate','InvoiceDate'],
date_parser=parse_dates,
encoding='utf-8')
这次,我得到了正确的数据类型,但导入文件花了几分钟:
In [14]: df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 3669868 entries, 0 to 3669867
Data columns (total 9 columns):
AccountNumber object
AccountName object
StatsDate datetime64[ns]
InvoiceDate datetime64[ns]
Product object
LineItem object
Charges float64
dtypes: datetime64[ns](2), float64(1), object(4)
现在,我使用这里概述的第一种方法,然后在导入后运行以下命令:
df['StatsDate'] = pd.to_datetime(df['StatsDate'],format='%m/%d/%Y')
df['InvoiceDate'] = pd.to_datetime(df['InvoiceDate'],format='%m/%d/%Y')
这个文件的大小会继续增长,所以我正在寻找最优化的方法。有没有更有效的解决方案?在
目前没有回答
相关问题 更多 >
编程相关推荐