如何使用 Pandas 处理来自 CSV 的不规则格式

和风

我一直在尝试不同的方法来处理来自 CSV 的 Pandas 中的日期时间。

我在 csv 文件中有 3 列:

  1. 开球日期
  2. 开球时间
  3. 时间

前两列格式正确。但是第三列“时间”的格式混淆了..有些代表时间,有些代表日期时间。

例如:

12:00:00 AM
1/1/1900 9:04:00 PM

如何使用熊猫制作相同的格式?

第二件事是我想添加所有三列以获得事件时间。

例如:

kickoffDate =['8/6/2017','8/6/2017','8/6/2017']
kickoffTime =['15:00:00','15:00:00','15:00:00']
time =['51:48:00','86:05:00','10:04']`

在这种情况下,时间是mm:ss:00格式。我想结合这三列来创建一个新列,称为eventdatetime

eventdatetime = [06-08-2017 15:51:48, 06-08-2017 16:26:05,06-08-2017 15:10:04]`

我怎样才能做到这一点?我可以使用以下公式将前两者结合起来:

DateTime1 = data['kickoffDate']+' '+ data ['kickoffTime']

原始 csv 文件可以从以下链接下载:

https://drive.google.com/open?id=1JL65x7nq2m6zk4qnaRUDKL894aEdXW_B

耶斯列

您可以将参数parse_dates与第一列和第二列用于datetimes,然后转换最后一列to_timedelta00:为没有值的值添加小时数:

df = pd.read_csv('Datetimetest.csv', parse_dates=[[0, 1]])

m = df['time'].str.count(':') != 1
df['time'] = pd.to_timedelta('00:' + df['time'].mask(m, df['time'].str.replace(':00$', '')))
df['eventdatetime'] = df['kickoffDate_kickoffTime'] + df['time']
print (df.head())
  kickoffDate_kickoffTime     time       eventdatetime
0     2018-04-30 19:00:00 00:47:36 2018-04-30 19:47:36
1     2018-04-30 19:00:00 00:15:28 2018-04-30 19:15:28
2     2018-04-29 13:15:00 00:52:03 2018-04-29 14:07:03
3     2018-04-29 13:15:00 01:03:42 2018-04-29 14:18:42
4     2018-04-29 13:15:00 00:10:43 2018-04-29 13:25:43

另一个解决方案,如果在输出中需要 4 个单独的列 - 仅转换为日期时间第一列,另一列转换为timedeltas:

df = pd.read_csv('Datetimetest.csv', parse_dates=[0])

m = df['time'].str.count(':') != 1
df['time'] = pd.to_timedelta('00:' + df['time'].mask(m, df['time'].str.replace(':00$', '')))
df['kickoffTime'] = pd.to_timedelta(df['kickoffTime'])
df['eventdatetime'] = df['kickoffDate'] + df['kickoffTime'] + df['time']
print (df.head())
  kickoffDate kickoffTime     time       eventdatetime
0  2018-04-30    19:00:00 00:47:36 2018-04-30 19:47:36
1  2018-04-30    19:00:00 00:15:28 2018-04-30 19:15:28
2  2018-04-29    13:15:00 00:52:03 2018-04-29 14:07:03
3  2018-04-29    13:15:00 01:03:42 2018-04-29 14:18:42
4  2018-04-29    13:15:00 00:10:43 2018-04-29 13:25:43

编辑:

如果输入数据不是csv,为了将第一列转换为日期时间,可以使用to_datetime参数parse_datesin read_csv

df = pd.read_csv('Datetimetest.csv')

m = df['time'].str.count(':') != 1
df['time'] = pd.to_timedelta('00:' + df['time'].mask(m, df['time'].str.replace(':00$', '')))

df['kickoffDate'] = pd.to_datetime(df['kickoffDate'])
df['kickoffTime'] = pd.to_timedelta(df['kickoffTime'])
df['eventdatetime'] = df['kickoffDate'] + df['kickoffTime'] + df['time']
print (df.head())
  kickoffDate kickoffTime     time       eventdatetime
0  2018-04-30    19:00:00 00:47:36 2018-04-30 19:47:36
1  2018-04-30    19:00:00 00:15:28 2018-04-30 19:15:28
2  2018-04-29    13:15:00 00:52:03 2018-04-29 14:07:03
3  2018-04-29    13:15:00 01:03:42 2018-04-29 14:18:42
4  2018-04-29    13:15:00 00:10:43 2018-04-29 13:25:43

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Pandas处理来自CSV的数据

如何从JavaScript中的不规则CSV解析和格式化字符串?

如何处理 R 中的不规则日期格式或日期错误?

如何在python中处理不规则的json文件以获取CSV中的序列化值?

如何使用csv点与gdal创建不规则栅格

在不使用 Pandas 的情况下使用 Python 处理来自 CSV 的数据

来自不规则时间序列索引的pandas DataFrame重新采样

使用numpy或pandas从长格式处理csv文件

如何解析熊猫中不规则的日期格式?

Pandas 使用 csv 输入处理日期时间

使用pandas写入csv时如何保留格式?

使用pandas.to_csv时如何指定日期格式?

如何使用Pandas获取格式的表格并导出到CSV?

如何使用python pandas将CSV解析为所需的格式?

来自数据的不规则采样

来自不规则元组的MultiIndex

使用来自 CSV 的列表输入的 Python 多处理

LSTM-使用deltaTime作为功能吗?如何处理不规则的时间戳?

如何处理不规则间隔的时间序列并返回规则间隔的时间序列

使用 Pandas 以 CSV 格式读取 ISO 8601

如何使用Spring Batch处理多个CSV格式的文件

使用 Pandas 处理来自 sql 的数据帧时内核死掉

在 Python 中使用 json.loads 时,如何处理来自 CSV 的非 ascii 字符?

如何根据长格式数据从不规则间隔计算百分比变化

如何将不规则的时间戳转换为日期格式

如何将具有不规则数据的多级字典转换为所需格式

使用pandas或numpy将不规则的colunm数据读取到python 3.x中

Univocity-不规则的csv解析

使用pd.read_csv(不规则的分隔符,自定义NA)读取沉闷的CSV文件