为什么在替换行中的每个值后,前两行完全不同?|Python、Pandas

ohtdti5x  于 2022-11-27  发布在  Python
关注(0)|答案(1)|浏览(111)

我有一个简单的脚本来删除一个包含日期时间值的字符串的左右两边的字符。原因是在我想要的实际值的两边都有不必要的字符。
它的工作原理是循环遍历一列(称为时间)中的所有项目,删除字符,然后用新值替换旧值。
这在大多数情况下都有效,奇怪的是,除了 Dataframe 中的前两行。
出于某种奇怪的原因,在我使用的. csv文件中,"Time"列的值是字符串,而"Closing Time"则抛出错误,除非我指定它们是字符串,尽管它们具有完全相同的结构。
下面是. csv文件中输入字段的屏幕截图:

请注意:第二行,第一个值没有一个语音标记之前,它是一个奇怪的excel的东西&实际值有它在上面看到的同一个屏幕截图。
下面是我正在使用的代码:

import pandas as pd

df = pd.read_csv("file.csv") # reading file

for item in df['Time']:
    item2 = item[1:]
    item3 = item2[:-8]
    df.replace(item, item3, inplace=True)

for item21 in df['Closing Time']:
    item22 = str(item21)[1:]
    item23 = str(item22)[:-8]
    df.replace(item21, item23, inplace=True)

print(df['Closing Time'])
print(df['Time'])

input("\nScript executed successfully | Press ENTER to Exit. ")

输出如下:

这是一个错误吗?因为我看不出为什么前两列特别出来与其余的不同。

ztmd8pv5

ztmd8pv51#

如果您只想提取string形式的时间戳,我建议使用regex。此外,使用for循环迭代数据集的效率非常低(对于大数据集,您会注意到速度很慢);我建议使用str.extract函数:

import pandas as pd

df = pd.read_csv("file.csv") # reading file

match_string = r'(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})'
df['Time'] = df['Time'].str.extract(match_string)
df['Closing Time'] = df['Closing Time'].str.extract(match_string)

print(df['Closing Time'])
print(df['Time'])

input("\nScript executed successfully | Press ENTER to Exit. ")

相关问题