熊猫数据框.at ValueError:无法将字符串转换为浮点数

时间:2019-12-29 17:46:56

标签: python pandas dataframe

我正在尝试为已经有一些信息的数据框中的特定单元格填充值。当我用小数据对其进行测试时,它可以工作,但是在我的项目中,它会抛出“ ValueError:无法将字符串转换为浮点数”

# df : a dataframe with data to be extracted and added to another dataframe data

some_list = df.iloc[:, 0].values
values = df.iloc[:, 1].values

indexList = data.index.values.tolist()

index = 0
for x in some_list:
    s = values[index]
    if x in indexList:
        # this line raised ValueError : cannot convert __(values in s)__ from string to float
        data.at[x, 'Some Column'] = s
    index += 1
some_list中的

个元素,值是字符串。这里现有的数据帧是数据,其中一列是'Some Column',索引标签是some_list中的某些元素(因此,如果some_list中的当前元素x是索引标签之一,则在单元格上设置值(行:索引标签x,列:“某些列”)的值[找到此x的同一行]

在“ Some Column”下填写单元格之前,应为NaN

我尝试使用.at函数测试一个小示例(未引发valueError):

column=['Year', 'first', 'second', 'third']
s = 'label1'
data = pd.DataFrame(columns=column)
row = pd.Series({'Year' : 2019, 'first' : 'asa', 'second' : 'awdqw'}, name=s)
data = data.append(row)


# Creates a pandas DataFrame. 
data_snip = {'name':['A', 'B', 'C', 'D'], 'y':[1, 2, 3, 4]} 
df = pd.DataFrame(data_snip, index =['one', 'two', 'three', 'four'])
df_array = df.iloc[:, 0].values
s = df_array[3] # should be 'D'

s = 'label3'
row = pd.Series({'Year' : 2030, 'first' : 'ubeubf', 'second' : 'qov.z'}, name=s)
data = data.append(row)
data.at['label3', 'third'] = s

这就是数据的样子:

        Year   first second third
label1  2019     asa  awdqw   NaN
label3  2030  ubeubf  qov.z     D

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

检查df.dtypes-您的错误是由于您试图用string浮点数将dtype对象打包到列中而造成的。 .at[]不会自动转换列类型。

在将string分配给单元格之前,请确保其为object dtype:

import pandas as pd

import numpy as np

df=pd.DataFrame(data={"x": list("abc"), "y": [1,2,3], "z": [np.nan for i in range(3)]}, index=["p", "q", "r"])

print(df)
#this works fine:
df.at["r", "z"]=4.5

print(df)
#without the line below it will fail:
df["z"]=df["z"].astype(str)
df.at["q", "z"]="z"