使用字符串转换来解决数据帧问题

时间:2017-05-06 05:28:18

标签: python dask

我可以轻松地将字符串转换为pandas中的日期,如此处所示......

df.date = pd.to_datetime(df.date, format="%m/%d/%Y")

在dask中似乎没有简单的方法吗?

以下是适用于日期的pandas示例:

import pandas as pd

url="http://web.mta.info/developers/data/nyct/turnstile/turnstile_170128.txt"
df=pd.read_csv(url)

df.info()

df.columns=['ca', 'unit', 'scp', 'station', 'inename', 'division', 'date', 'time', 'desc', 'entries', 'exits']

df.date = pd.to_datetime(df.date, format="%m/%d/%Y")

这是dask工作但不能转换字符串:

link = 'http://web.mta.info/developers/'

data = ['data/nyct/turnstile/turnstile_170128.txt',
                        'data/nyct/turnstile/turnstile_170121.txt',
                        'data/nyct/turnstile/turnstile_170114.txt',
                        'data/nyct/turnstile/turnstile_170107.txt' 
        ]

urls=[]
for i in data:
    urls.append(link+i)

import pandas as pd
import dask
import dask.dataframe as dd

ddfs = [dask.delayed(pd.read_csv)(url) for url in urls]

ddf = dd.from_delayed(ddfs)

ddf.columns=['ca', 'unit', 'scp', 'station', 'inename', 'division', 'date', 'time', 'desc', 'entries', 'exits']

如何将字符串转换为日期?

1 个答案:

答案 0 :(得分:3)

修改

这已被添加到Dask dataframe

dd.to_datetime(...)

以前的回答

使用parse_dates=关键字pd.read_csv

执行此操作
ddfs = [dask.delayed(pd.read_csv)(url, parse_dates=['DATE']) for url in urls]

或者您甚至可以将原始数据中的DATE和TIME列合并为一列

ddfs = [dask.delayed(pd.read_csv)(url, parse_dates={'DATETIME': ['DATE', 'TIME']}) for url in urls]

使用map_partitions

如果您的数据框包含对象dtype列,则可以始终使用map_partitions将pandas函数应用于每个分区。您还应该为地图分区提供预期的输出类型。

ddf['date'] = ddf['date'].map_partitions(pd.to_datetime, format='%m/%d/%Y',
                                         meta=('date', 'M8[ns]'))

这通常是覆盖没有dask.dataframe API的Pandas功能的好方法。