Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用Pandas处理CSV中的不规则格式_Python_Pandas - Fatal编程技术网

Python 如何使用Pandas处理CSV中的不规则格式

Python 如何使用Pandas处理CSV中的不规则格式,python,pandas,Python,Pandas,我一直在尝试不同的方法来处理CSV中熊猫的日期时间 我在csv文件中有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:0

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

我在csv文件中有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:

我该怎么做?我可以使用以下公式将前两者结合起来:

DateTime1 = data['kickoffDate']+' '+ data ['kickoffTime']
原始csv文件可从以下链接下载:

您可以将参数parse_dates与datetimes的第一列和第二列一起使用,然后将最后一列转换为添加00:for hours的值,而不使用任何值::

如果希望在输出中有4个单独的列,另一种解决方案是仅将第一列转换为datetimes,将另一列转换为TimeDelta:

编辑:

如果输入数据不是csv,则可以使用read_csv中的参数parse_dates将第一列转换为datetime:


感谢jezrael,第三列的数据基本上是分和秒。如果我们查看输出的第一行。我预计的eventdatetime是2018-0-30 19:18:36我可以知道如何处理吗?@Zephyr-第一排是2018年4月30日,19:00:00,47:36:00,为什么需要2018-0-30 19:18:36?不是2018-04-30 19:47:36吗?请检查编辑的答案。哦,对不起,我的错,应该是2018-04-30 19:47:36嗨,天哪,它一直工作到代码的第三行。当我把它们加在一起时,我得到了错误。eventdata['eventdatetime']=eventdata['kickoffDate']+eventdata['kickoffTime']+eventdata['time']**ufunc add不能使用类型为“O”和“已排序”的操作数,Jez。我将一行eventdata['kickoffDate']=pd.to_datetimeeventdata.kickoffDate,格式=“%Y/%m/%d”
DateTime1 = data['kickoffDate']+' '+ data ['kickoffTime']
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
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
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