嗨,谁在读这个!我试图使用df['ride_duration'] = df['ride_duration'].replace(r'^\s+$',"00:00:00", regex=True)
从下面附带的屏幕截图中删除空格/空格。事情是,由于某种原因,这是行不通的,即使这是我在Stack Overflow上看到的。我也尝试过:df['ride_duration'] = df['ride_duration'].replace("","00:00:00)
遗憾的是,结果根本不会改变列。有人可以指出我为什么这不起作用的正确方向?
示例代码:
fmtymd = '%Y/%m/%d'
df = pd.read_csv(csvfilelocation, sep=',')
df['scheduled departure time'] = pd.to_datetime(df['scheduled departure time'], format = fmtymd)
df['epoch_arrival'] = pd.to_datetime(df['epoch_arrival'], format = fmtymd)
df['latetime'] = (df['epoch_arrival'] - df['scheduled departure time']).where(df['OTP'] == False)
df['latetime'] = df['latetime'].replace("","00:00:00")
df['latetime'] = pd.to_timedelta(df['latetime'])
df['latetime'] = (df['latetime'] / np.timedelta64(1, 'm')).astype(int)
df.to_csv(csvfilelocation, index=False, float_format='%.0f')
CSV示例:https://ufile.io/qtkxb
答案 0 :(得分:2)
您可能需要阅读正则表达式教程。
这个正则表达式正在寻找一个或多个空白字符,就是这样。
library(pryr)
x <- 1:10
pryr::address(x)
x[3] <- 7L
pryr::address(x)
由于您现在已经评论过这是一个timedelta列,我们需要使用一些字符串格式。请参阅下面的更新解决方案。
df['ride_duration'].replace(r'^\s+$',"00:00:00", regex=True)
然后将其恢复到时间范围,你可以做到:
df['ride_duration'].astype(str).replace(r"\s+","",regex=True)
答案 1 :(得分:1)
我为你做了一个例子。我有以下数据集:
Date, Name
, John
26.05.16, David
27.05.16, Rose
, Yolo
29.05.16, Marie
30.05.16, Mark
这是我的代码分3步:
import pandas as pd
# Date format
fmtymd = '%d.%m.%y'
# Load csv file
df = pd.read_csv('./sample-data.csv', sep=',')
print(df)
结果:
Date Name
0 NaN John
1 26.05.16 David
2 27.05.16 Rose
3 NaN Yolo
4 29.05.16 Marie
5 30.05.16 Mark
现在我想将日期格式设置为Date:
列df['Date'] = pd.to_datetime(df['Date'], format = fmtymd)
print(df)
结果:
Date Name
0 NaT John
1 2016-05-26 David
2 2016-05-27 Rose
3 NaT Yolo
4 2016-05-29 Marie
5 2016-05-30 Mark
这是重要的一步。如您所见,空字符串将转换为“NaT”(非时间戳)。这就是为什么你可以用“00:00:00”替换“”的原因
现在我想用“00:00:00”替换NaT:
df['Date'] = [d.strftime('%Y-%m-%d') if not pd.isnull(d) else '00:00:00' for d in df['Date']]
print(df)
结果:
Date Name
0 00:00:00 John
1 2016-05-26 David
2 2016-05-27 Rose
3 00:00:00 Yolo
4 2016-05-29 Marie
5 2016-05-30 Mark
这只是一个例子,我知道日期格式不同(对于列日期)。您需要为新列设置相同的dateformat。
完整代码:
import pandas as pd
fmtymd = '%d.%m.%y'
df = pd.read_csv('./sample-data.csv', sep=',')
print(df)
df['Date'] = pd.to_datetime(df['Date'], format = fmtymd)
print(df)
df['Date'] = [d.strftime('%Y-%m-%d') if not pd.isnull(d) else '00:00:00' for d in df['Date']]
print(df)