gpt4 book ai didi

python - 当您需要基于另一列更新列时,在 Pandas 中循环的替代方法

转载 作者:太空宇宙 更新时间:2023-11-03 14:10:13 24 4
gpt4 key购买 nike

我有一个 Pandas dataframe,其中包含我想转换为 datetime 的文本日期。问题是我的一些文本日期是错误数据,因此无法转换。在无法转换日期的情况下,我想将 Error 列更新为 True 的值并设置 Date 列设置为 None,以便稍后可以将其添加到格式为 datetime 的数据库列中。

这是一个简化的例子。我的 dataframe 可能有 100 万行和多个日期列,这需要完成,因此我需要一种更快的方法来执行此操作。我知道典型的约定是避免使用 Pandas 进行循环,但我想不出解决它的方法。

import pandas as pd
import numpy as np
import datetime

data = 1000 *[['010115', None],
['320115', None]]


df = pd.DataFrame(data=data,
columns=['Date', 'Error'])

for index, row in df.iterrows():
try:
datetime.datetime.strptime(row['Date'], '%d%m%y')
except ValueError:
row['Date'] = None
row['Error'] = True
except TypeError:
pass

print df

最佳答案

您可以使用 to_datetime带有参数 errors='coerce'isnull :

data = 10 *[['010115', None],
['320115', None]]


df = pd.DataFrame(data=data,
columns=['Date', 'Error'])

print (df)
Date Error
0 010115 None
1 320115 None
2 010115 None
3 320115 None
4 010115 None
5 320115 None
6 010115 None
7 320115 None
8 010115 None
9 320115 None
10 010115 None
11 320115 None
12 010115 None
13 320115 None
14 010115 None
15 320115 None
16 010115 None
17 320115 None
18 010115 None
19 320115 None
df['Date'] = pd.to_datetime(df['Date'], format='%d%m%y',errors='coerce') 
df['Error'] = df['Date'].isnull()
print (df)
Date Error
0 2015-01-01 False
1 NaT True
2 2015-01-01 False
3 NaT True
4 2015-01-01 False
5 NaT True
6 2015-01-01 False
7 NaT True
8 2015-01-01 False
9 NaT True
10 2015-01-01 False
11 NaT True
12 2015-01-01 False
13 NaT True
14 2015-01-01 False
15 NaT True
16 2015-01-01 False
17 NaT True
18 2015-01-01 False
19 NaT True

关于python - 当您需要基于另一列更新列时,在 Pandas 中循环的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39132367/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com