如果我有一个数据框,第一列是datetime64列.如何将此列拆分为2个新列,一个日期列和一个时间列.到目前为止,这是我的数据和代码:
DateTime,Actual,Consensus,Previous
20140110 13:30:00,74000,196000,241000
20131206 13:30:00,241000,180000,200000
20131108 13:30:00,200000,125000,163000
20131022 12:30:00,163000,180000,193000
20130906 12:30:00,193000,180000,104000
20130802 12:30:00,104000,184000,188000
20130705 12:30:00,188000,165000,176000
20130607 12:30:00,176000,170000,165000
20130503 12:30:00,165000,145000,138000
20130405 12:30:00,138000,200000,268000
...
import pandas as pd
nfp = pd.read_csv("NFP.csv", parse_dates=[0])
nfp
Run Code Online (Sandbox Code Playgroud)
得到:
Out[10]: <class 'pandas.core.frame.DataFrame'>
Int64Index: 83 entries, 0 to 82
Data columns (total 4 columns):
DateTime 82 non-null values
Actual 82 non-null values
Consensus 82 non-null values
Previous 82 non-null values
dtypes: datetime64[ns](1), float64(3)
Run Code Online (Sandbox Code Playgroud)
一切都很好,但不知道该怎么办.
有两点我特别不确定:
还有什么地方我可以查找这种信息吗?
很难找到类库的详细参考谢谢!
unu*_*tbu 27
如何将CSV直接解析为所需的DataFrame:
通过功能于字典pandas.read_csv
的converters
关键字参数:
import pandas as pd
import datetime as DT
nfp = pd.read_csv("NFP.csv",
sep=r'[\s,]', # 1
header=None, skiprows=1,
converters={ # 2
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'])
print(nfp)
Run Code Online (Sandbox Code Playgroud)
产量
Date Time Actual Consensus Previous
0 2014-01-10 13:30:00 74000 196000 241000
1 2013-12-06 13:30:00 241000 180000 200000
2 2013-11-08 13:30:00 200000 125000 163000
3 2013-10-22 12:30:00 163000 180000 193000
4 2013-09-06 12:30:00 193000 180000 104000
5 2013-08-02 12:30:00 104000 184000 188000
6 2013-07-05 12:30:00 188000 165000 176000
7 2013-06-07 12:30:00 176000 170000 165000
8 2013-05-03 12:30:00 165000 145000 138000
9 2013-04-05 12:30:00 138000 200000 268000
Run Code Online (Sandbox Code Playgroud)
sep=r'[\s,]'
告诉read_csv
在正则表达式模式上分割csv的行r'[\s,]'
- 空格或逗号.converters
参数告诉read_csv
将给定的函数应用于某些列.键(例如0和1)引用列索引,值是要应用的函数.如何在执行csv_read后拆分DataFrame
import pandas as pd
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']
print(nfp)
Run Code Online (Sandbox Code Playgroud)
哪个更快?
这取决于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 nfp
def 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 nfp
In [114]: %timeit using_index()
100 loops, best of 3: 1.71 ms per loop
In [115]: %timeit using_converter()
1000 loops, best of 3: 914 µs per loop
Run Code Online (Sandbox Code Playgroud)
但是,对于只有几百行或更多行的CSV,使用DatetimeIndex会更快.
N = 20
filename = '/tmp/data'
content = '''\
DateTime,Actual,Consensus,Previous
20140110 13:30:00,74000,196000,241000
20131206 13:30:00,241000,180000,200000
20131108 13:30:00,200000,125000,163000
20131022 12:30:00,163000,180000,193000
20130906 12:30:00,193000,180000,104000
20130802 12:30:00,104000,184000,188000
20130705 12:30:00,188000,165000,176000
20130607 12:30:00,176000,170000,165000
20130503 12:30:00,165000,145000,138000
20130405 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 loop
In [306]: %timeit using_index()
100 loops, best of 3: 9.3 ms per loop
Run Code Online (Sandbox Code Playgroud)
我在哪里可以查找这类信息?
?
功能,如果你输入一个函数,它会给你函数的docstring.这两个功能确实可以帮助您快速内省Python对象.它还告诉你函数定义在哪个文件中(如果在纯Python中定义) - 这导致我...坚持下去吧.你知道的越多越容易.
如果你给它最好的镜头而仍然无法找到答案,请在Stackoverflow上发布一个问题.您希望能够快速得到答案,并帮助其他人搜索同样的事情.
归档时间: |
|
查看次数: |
10803 次 |
最近记录: |