Pandas 无法获取.replace()以正确运行

Pandas 无法获取.replace()以正确运行,pandas,dataframe,Pandas,Dataframe,嗨,谁在看这个!我正在尝试使用df['ride_duration']=df['ride_duration']。替换(r'^\s+$,“00:00:00”,regex=True)从下面附带的屏幕截图中删除空格/空白。问题是,由于某种原因,这是不工作的,即使这是我在查看堆栈溢出时发现的。我也试过:df['ride\u duration']=df['ride\u duration']。替换(“,”00:00:00)很遗憾,结果根本没有改变列。有人能告诉我为什么这不起作用吗 示例代码: fmtymd =

嗨,谁在看这个!我正在尝试使用
df['ride_duration']=df['ride_duration']。替换(r'^\s+$,“00:00:00”,regex=True)
从下面附带的屏幕截图中删除空格/空白。问题是,由于某种原因,这是不工作的,即使这是我在查看堆栈溢出时发现的。我也试过:
df['ride\u duration']=df['ride\u duration']。替换(“,”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示例:

您可能应该阅读一本regexp教程

此regexp正在查找一个或多个空格字符,仅此而已

df['ride_duration'].replace(r'^\s+$',"00:00:00", regex=True)
由于您现在评论说这是一个timedelta列,我们需要使用一些字符串格式。请参阅下面更新的解决方案

df['ride_duration'].astype(str).replace(r"\s+","",regex=True)
然后,要将其恢复到时间增量中,您可以执行以下操作:

pd.to_timedelta(df['ride_duration'].astype(str).replace(r"\s+","",regex=True))

我为您做了一个示例。我有以下数据集:

Date, Name
, John
26.05.16, David
27.05.16, Rose
, Yolo
29.05.16, Marie
30.05.16, Mark
这是我的代码,分为3步:

将熊猫作为pd导入
#日期格式
fmtymd='%d.%m.%y'
#加载csv文件
df=pd.read_csv('./sample data.csv',sep=','))
打印(df)
结果:

日期名称
0南约翰
1 26.05.16大卫
2 27.05.16玫瑰
3南约罗
4 29.05.16玛丽
5.30.05.16标记
现在我想将日期格式设置为列日期:

df['Date']=pd.to_datetime(df['Date'],format=fmtymd)
打印(df)
结果:

日期名称
0纳特·约翰
1 2016-05-26大卫
2 2016-05-27玫瑰
3纳特尤罗
4 2016-05-29玛丽
5 2016-05-30马克
这是一个重要的步骤。如您所见,空字符串被转换为“NaT”(非时间戳)。这就是为什么您可以将“”替换为“00:00:00”

现在我想用“00:00:00”替换NaT:

df['Date']=[d.strftime('%Y-%m-%d')如果不是pd.isnull(d),则df['Date']中的d为'00:00:00']
打印(df)
结果:

日期名称
0:00:00约翰
1 2016-05-26大卫
2 2016-05-27玫瑰
3 00:00:00约洛
4 2016-05-29玛丽
5 2016-05-30马克
这只是一个例子,我知道日期格式不同(对于列date)。您需要为新列设置相同的dateformat

完整代码:

将熊猫作为pd导入
fmtymd='%d.%m.%y'
df=pd.read_csv('./sample data.csv',sep=','))
打印(df)
df['Date']=pd.to_datetime(df['Date'],格式=fmtymd)
打印(df)
df['Date']=[d.strftime('%Y-%m-%d')如果不是pd.isnull(d),则df['Date']中的d为'00:00:00']
打印(df)

可能您的代码正在运行,但Microsoft Excel会将00:00:00替换为空值。Excel通常会决定值的上下文并自动替换。我建议您使用其他软件(如Atom、Sublime Text或Visual Studio代码)打开csv文件,以获取文件的真实值。@MichaelCara刚刚签入LibreCalc a这仍然是一个空白,好的,代替你非常受限的正则表达式,试试这个:df['ride\u duration']=df['ride\u duration'].replace(r'\s+,“00:00:00”,regex=True)如果它不起作用,试试我建议你使用的一个工具。即使是一个简单的nano。干杯:)df['ride\u duration']?您的替换看起来只在
str
上工作,而不是从
datetime
@RonKalian派生的任何类型。它是一个时间增量。问题是,这段代码工作了一年,但现在它停止工作,这很有趣。尝试了这个,不幸在我的情况下它不工作。仅供参考,这是一个骑乘时间增量a64[ns]啊,那会有所不同,谢谢你的更新。请看编辑后的答案。是的,非常有趣!熊猫API确实在快速发展,你以前的方法可能是这种发展的牺牲品之一。啊,我找到了一种更简单的方法来做同样的事情。让我再次更新答案。无意中删除了旧评论,但w我说的是,它在2.7中工作很有趣,但在python 3Ah中不工作,我在3.6.4中进行了测试;我认为我们无论如何都需要移动到3,所以不幸的是,它的代码要多一点,但我确实认为timedelta不一定支持字符串函数是有道理的。