如何将CSV直接解析为所需的Dataframe:
将函数字典传递给
pandas.read_csv的
converters关键字参数:
import pandas as pdimport datetime as DTnfp = pd.read_csv("NFP.csv", sep=r'[s,]', # 1 header=None, skiprows=1, converters={ # 20: lambda x: DT.datetime.strptime(x, '%Y%m%d'), 1: lambda x: DT.time(*map(int, x.split(':')))}, names=['Date', 'Time', 'Actual', 'Consensus', 'Previous'])print(nfp)
产量
Date Time Actual Consensus Previous0 2014-01-10 13:30:00 74000 196000 2410001 2013-12-06 13:30:00 241000 180000 2000002 2013-11-08 13:30:00 200000 125000 1630003 2013-10-22 12:30:00 163000 180000 1930004 2013-09-06 12:30:00 193000 180000 1040005 2013-08-02 12:30:00 104000 184000 1880006 2013-07-05 12:30:00 188000 165000 1760007 2013-06-07 12:30:00 176000 170000 1650008 2013-05-03 12:30:00 165000 145000 1380009 2013-04-05 12:30:00 138000 200000 268000
sep=r'[s,]'
告诉read_csv
您在正则表达式模式下将csv的行拆分r'[s,]'
-空格或逗号。- 该
converters
参数告诉read_csv
您将给定功能应用于某些列。键(例如0和1)引用列索引,并且值是要应用的功能。
执行csv_read后如何拆分Dataframe
import pandas as pdnfp = pd.read_csv("NFP.csv", parse_dates=[0], infer_datetime_format=True)temp = pd.DatetimeIndex(nfp['DateTime'])nfp['Date'] = temp.datenfp['Time'] = temp.timedel nfp['DateTime']print(nfp)
哪个更快?
这取决于CSV的大小。(感谢Jeff指出了这一点。)
对于小型CSV,使用解析后,直接将CSV直接解析为所需格式比使用DatetimeIndex更快
parse_dates=[0]:
def using_converter(): nfp = pd.read_csv("NFP.csv", sep=r'[s,]', header=None, skiprows=1,converters={ 0: lambda x: DT.datetime.strptime(x, '%Y%m%d'), 1: lambda x: DT.time(*map(int, x.split(':')))},names=['Date', 'Time', 'Actual', 'Consensus', 'Previous']) return nfpdef using_index(): nfp = pd.read_csv("NFP.csv", parse_dates=[0], infer_datetime_format=True) temp = pd.DatetimeIndex(nfp['DateTime']) nfp['Date'] = temp.date nfp['Time'] = temp.time del nfp['DateTime'] return nfpIn [114]: %timeit using_index()100 loops, best of 3: 1.71 ms per loopIn [115]: %timeit using_converter()1000 loops, best of 3: 914 µs per loop
但是,对于只有几百行或更多行的CSV,使用DatetimeIndex更快。
N = 20filename = '/tmp/data'content = '''DateTime,Actual,Consensus,Previous20140110 13:30:00,74000,196000,24100020131206 13:30:00,241000,180000,20000020131108 13:30:00,200000,125000,16300020131022 12:30:00,163000,180000,19300020130906 12:30:00,193000,180000,10400020130802 12:30:00,104000,184000,18800020130705 12:30:00,188000,165000,17600020130607 12:30:00,176000,170000,16500020130503 12:30:00,165000,145000,13800020130405 12:30:00,138000,200000,268000'''def setup(n): header, remainder = content.split('n', 1) with open(filename, 'w') as f: f.write('n'.join([header]+[remainder]*n))In [304]: setup(50)In [305]: %timeit using_converter()100 loops, best of 3: 9.78 ms per loopIn [306]: %timeit using_index()100 loops, best of 3: 9.3 ms per loop
我在哪里可以找到这类信息?
- 有时您可以在《熊猫食谱》中找到示例。
- 有时,通过网络搜索或搜索Stackoverflow就足够了。
- 度过一个漫长的周末,无所事事,但阅读 熊猫文档当然也将有所帮助。
- 安装IPython。它具有制表符补全,如果您
?
在函数后键入a ,它将为您提供函数的文档字符串。这两个功能确实可以帮助您快速自检Python对象。它还告诉您函数在哪个文件中定义(如果在纯Python中定义)-导致我… - 阅读源代码
保持它。您越了解,它越容易获得。
如果您尽力而为,但仍然找不到答案,请在Stackoverflow上发布问题。希望您会很快得到答案,并帮助其他人搜索相同的内容。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)