pandas 将系列作为新行添加到DataFrame触发FutureWarning

wyyhbhjk  于 2023-02-02  发布在  其他
关注(0)|答案(4)|浏览(199)

尝试将Series类型的新行添加到DataFrame中,两者共享相同的列/索引:

df.loc[df.shape[0]] = r

获取:
未来警告:在将来的版本中,bool_only = True的约简中将不包含全bool值的对象数据类型列。请改为显式转换为bool数据类型。
它来自inference module

igsr9ssn

igsr9ssn1#

我得到了同样的错误,这是因为version 1.5.0 of pandas为什么可能有些答案在这里没有解决问题:
已弃用在DataFrame.any()和DataFrame.all()中将全bool对象数据类型列视为类bool,而将bool_only=True显式转换为bool(GH46188)
所以我试着去理解...但是不知何故我还是找到了一个解决方案。原因是带有布尔值的列没有正确地转换。我使用了concat,对我来说它是现有的DataFrame。
因为我不想为Dataframe的所有列定义相应的dtype(这也是可能的),所以我对必要的列进行了更改:

df["var1"]=df["var1"].astype(bool)

或者对于多个:

df=df.astype({"var1":bool,"var2":bool})

然后concat在没有未来警告的情况下为我工作。

jbose2ul

jbose2ul2#

尝试:

df
    c1  c2  c3      c4
0   1   3   True    abc
1   2   4   False   def

d = {'c1': 3, 'c2': 5, 'c3': True, 'c4': 'ghi'} 
s = pd.Series(d) 

s
c1       3
c2       5
c3    True
c4     ghi
dtype: object

df.loc[df.shape[0]] = s.to_numpy() 

df
    c1  c2  c3      c4
0   1   3   True    abc
1   2   4   False   def
2   3   5   True    ghi
62o28rlo

62o28rlo3#

碱:

import pandas as pd

data = pd.DataFrame.from_dict({
    'Name': ['Nik', 'Kate', 'Evan', 'Kyra'],
    'Age': [31, 30, 40, 33],
    'Location': ['Toronto', 'London', 'Kingston', 'Hamilton']
})

df = pd.DataFrame(data)
df

| | 姓名|年龄|位置|
| - ------|- ------|- ------|- ------|
| 无|尼克|三十一|多伦多|
| 1个|凯特|三十|伦敦|
| 第二章|埃文|四十|金斯顿|
| 三个|凯拉|三十三|汉密尔顿|
解决方案:

import pandas as pd

data = pd.DataFrame.from_dict({
    'Name': ['Nik', 'Kate', 'Evan', 'Kyra'],
    'Age': [31, 30, 40, 33],
    'Location': ['Toronto', 'London', 'Kingston', 'Hamilton']
})

df = pd.DataFrame(data)

# Using pandas.concat() to add a row
r = pd.DataFrame({'Name':'Creuza', 'Age':69, 'Location':'São Gonçalo'}, index=[0])
df2 = pd.concat([r,df.loc[:]]).reset_index(drop=True)
df2

| | 姓名|年龄|位置|
| - ------|- ------|- ------|- ------|
| 无|克罗伊扎|六十九|圣贡萨洛|
| 1个|尼克|三十一|多伦多|
| 第二章|凯特|三十|伦敦|
| 三个|埃文|四十|金斯顿|
| 四个|凯拉|三十三|汉密尔顿|

vaj7vani

vaj7vani4#

发生在我身上,以及当我在谷歌搜索的消息,我得到了这里。它发生在我身上的原因:将dict转换为 Dataframe 时,转换不会将布尔类型转换为:〈class 'pandas.core.arrays.boolean. BooleanArray'〉它将其转换为〈class 'numpy. ndarray'〉。因此您需要“手动”转换它,然后将其连接起来,对我有效的正确命令是:

_item = pd.DataFrame([dictionary])
_item["column"] = _item["column"].astype("boolean")
data_frame = pd.concat([data_frame, _item], ignore_index=True)

另请参见:https://github.com/pandas-dev/pandas/issues/46662

相关问题