new pandas apply 'float' 对象不可订阅
new pandas apply 'float' object is not subscriptable
我有一个 df,其中日期列为 MM-DD-YYYY 字符串。我想将其转换为 YYYY/MM/DD 字符串。我尝试了以下方法:
def date_MDY_YMD(s):
"""Convert string date from MM/DD/YYYY to YYYY-MM-DD."""
M = s[:2]
D = s[3:5]
Y = s[6:10]
return '-'.join((Y, M, D))
df['Date'] = df['Date'].apply(date_MDY_YMD)
我收到错误“类型错误:'float' 对象不可订阅”
'float' 让我感到困惑:df.dtypes 告诉我 Date 是一个对象,但我看过的所有示例都是字符串。
Whosebug 上也有类似的问题,但它们关注的是在列上使用 apply() 或需要获取多个列的速度问题。这里也不是困难。
任何帮助将不胜感激。
FWIW,我不会通过以下输入重现您的问题。
df = pd.DataFrame({'Date': ['08-03-2022', '31-12-2022']})
您可能有 NaN,因为此输入会触发错误:
df = pd.DataFrame({'Date': ['08-03-2022', '31-12-2022', float('nan')]})
也就是说,不要使用 apply
,它很慢。利用 pandas 向量函数(您也不会有缺失值的问题)。
df['Date2'] = pd.to_datetime(df['Date'], dayfirst=True).dt.strftime('%Y/%m/%d')
使用 str.replace
和正则表达式替换字符串:
df['Date3'] = df['Date'].str.replace(r'(\d{2})-(\d{2})-(\d{4})', r'//',
regex=True)
输出:
Date Date2 Date3
0 08-03-2022 2022/03/08 2022/03/08
1 31-12-2022 2022/12/31 2022/12/31
2 NaN NaN NaN
我有一个 df,其中日期列为 MM-DD-YYYY 字符串。我想将其转换为 YYYY/MM/DD 字符串。我尝试了以下方法:
def date_MDY_YMD(s):
"""Convert string date from MM/DD/YYYY to YYYY-MM-DD."""
M = s[:2]
D = s[3:5]
Y = s[6:10]
return '-'.join((Y, M, D))
df['Date'] = df['Date'].apply(date_MDY_YMD)
我收到错误“类型错误:'float' 对象不可订阅” 'float' 让我感到困惑:df.dtypes 告诉我 Date 是一个对象,但我看过的所有示例都是字符串。
Whosebug 上也有类似的问题,但它们关注的是在列上使用 apply() 或需要获取多个列的速度问题。这里也不是困难。
任何帮助将不胜感激。
FWIW,我不会通过以下输入重现您的问题。
df = pd.DataFrame({'Date': ['08-03-2022', '31-12-2022']})
您可能有 NaN,因为此输入会触发错误:
df = pd.DataFrame({'Date': ['08-03-2022', '31-12-2022', float('nan')]})
也就是说,不要使用 apply
,它很慢。利用 pandas 向量函数(您也不会有缺失值的问题)。
df['Date2'] = pd.to_datetime(df['Date'], dayfirst=True).dt.strftime('%Y/%m/%d')
使用 str.replace
和正则表达式替换字符串:
df['Date3'] = df['Date'].str.replace(r'(\d{2})-(\d{2})-(\d{4})', r'//',
regex=True)
输出:
Date Date2 Date3
0 08-03-2022 2022/03/08 2022/03/08
1 31-12-2022 2022/12/31 2022/12/31
2 NaN NaN NaN