如何使用熊猫解析 CSV 文件?
Posted
技术标签:
【中文标题】如何使用熊猫解析 CSV 文件?【英文标题】:How to parse CSV file using pandas? 【发布时间】:2016-02-07 00:21:15 【问题描述】:现在我有一个 .csv 文件,其中有一列时间,例如“20140203 00:00:03.132”,如何有效地删除秒部分(“:03.132”)?数据量很大,我试过用sed对数据进行预处理,但是太慢了!
我现在正在尝试在 pandas 中解析 .csv 文件。无论如何我可以有效地处理这个问题吗?也欢迎使用 pandas 以外的方法!
【问题讨论】:
如果你没有集群来执行操作,那么你尝试的任何事情都会很慢,因为它会在一台机器上完成 pandas 可能不是最快的方法...afaik,它只是使用标准的 csv 模块,并进行了额外的处理,包括尝试将所有内容强制转换为数据类型;字符串操作更快,因此仅使用迭代 csv 阅读器会更快。我们在谈论多少数据? 【参考方案1】:有一个方便的时间戳解析库:datetime:
import datetime
x = '20140203 00:00:03.132'
timestamp = datetime.datetime.strptime(x, '%Y%m%d %H:%M:%S.%f')
print datetime.datetime.strftime(timestamp, '%Y%m%d %H:%M') # 20140203 00:00
或者由于处理大量数据有点慢,你可以从第一个:
的右边拆分,然后取结果列表的第一个元素:
print x.rsplit(':', 1)[0] # 20140203 00:00
【讨论】:
我试过了,但考虑到大量数据,速度很慢。 @xxx222 够公平的。您可以像print x.rsplit(':', 1)[0]
这样在最后一个 :
上拆分字符串,这将产生相同的结果,这将是一个快速的操作。【参考方案2】:
看看date_parser
参数到pandas.read_csv()
。类似这样的东西应该可以工作:
import dateutil
from pandas import read_csv
def my_date_parser(seq):
return [dateutil.parser.parse(s[:14]) for s in seq]
csv = read_csv('file.csv', parse_dates=[3], date_parser=my_date_parser)
您可能还需要提供参数parse_dates
来确定包含日期字符串的列,例如上面将第 3 列指定为日期列。
【讨论】:
以上是关于如何使用熊猫解析 CSV 文件?的主要内容,如果未能解决你的问题,请参考以下文章