提问人:Valip 提问时间:12/16/2021 更新时间:2/27/2023 访问量:6258
如何修复 pandas FutureWarning:从包含字符串的数据推断 datetime64[ns] 已弃用
How to fix pandas FutureWarning: inferring datetime64[ns] from data containing strings is deprecated
问:
我有以下代码,在我将 pandas 升级到最新版本之前运行良好:
def group_amounts_by_batch(self) -> pd.DataFrame:
data_frame = (
self.data_frame[self.columns.amount]
.groupby(
[
self.data_frame[ExtraColumnNames.BatchId],
self.data_frame[ExtraColumnNames.DepositId],
self.data_frame[ExtraColumnNames.DepositAmount],
self.data_frame[ExtraColumnNames.DepositDate],
self.data_frame[ExtraColumnNames.BatchDate],
self.data_frame[ExtraColumnNames.NonFundedAmount],
]
)
.sum()
.reset_index()
)
data_frame = data_frame[data_frame[ExtraColumnNames.DepositId] != ""]
data_frame = data_frame.round(2)
return data_frame
但现在我收到以下警告:
FutureWarning:从包含字符串的数据中推断 datetime64[ns] 已弃用,并将在将来的版本中删除。若要显式保留旧行为,请传递 Series(data, dtype={value.dtype}) .reset_index()
如何在代码中使用建议的解决方案 () 来修复该警告?explicitly pass Series(data, dtype={value.dtype}) .reset_index()
data_frame.dtypes:
Batch Id object
Deposit Id object
Deposit Amount object
Deposit Date datetime64[ns]
Batch Date datetime64[ns]
NonFunded Amount object
amount float64
dtype: object
答:
0赞
Vlad V
10/28/2022
#1
我在解析带有字符串日期的 excel 文件时收到类似的警告:
df = pd.read_excel('path/to/file')
帮助我摆脱它的解决方法如下:
df = pd.read_excel('path/to/file',
parse_dates=['col_date1', 'col_date2', ...],
date_parser=lambda x: pd.to_datetime(x, format='%Y-%m-%d'))
因此,在您的情况下,尝试使用 pd.to_datetime() 函数将日期列包装在分组数组中。但是,值得重构准备初始帧的部分代码,并考虑在那里解析适当的日期列。self.data_frame
2赞
Anna Christiane Kolandjian
2/27/2023
#2
创建 DataFrame 时,应为数据指定 dtype 参数:
values = [(3, 'a'), (2, 'b'), (1, 'c'), (0, 'd')]
data = np.array(values, dtype=[('col_1', 'object'), ('col_2', 'datetime64')])
df = pd.DataFrame.from_records(data)
在您的例子中,当您创建 DataFrame 时,您只指定了值,而没有指定 dtype! 创建自己的 dtype 以将其添加到代码中。
您可以使用元组自动创建 dtype,假设您有 2 个列表:1 个列表“cols”用于 DataFrame 列,另一个列表“types”用于列类型。
dtype = [tuple([col, types[index]])
for index, col in enumerate(cols)]
评论
0赞
Domenico Spidy Tamburro
4/4/2023
更明确地说:顺便说一句,这非常有帮助dtype = [tuple([col, df.dtypes[index]]) for index, col in enumerate(df.columns)]
0赞
Anna Christiane Kolandjian
4/5/2023
是的@DomenicoSpidyTamburro对,我很高兴它有帮助!
评论
self.data_frame
DepositDate
BatchDate
group_amounts_by_batch
read_excel
dtypes=...