目录
错误场景
使用pandas库的append方法,将numpy.ndarray类型的数据追加到dataframe中的时候报错:
TypeError: cannot concatenate object of type '<class 'numpy.ndarray'>'; only Series and DataFrame objs are valid
出问题的代码简化如下,报错发生在result_df = result_df._append(row_data)这一行。
import pandas as pd
if __name__ == '__main__':
# 读取指定的excel文件
df = pd.read_excel(r"D:\Test\src1.xlsm",header=None)
# 获取第5行的值
row_data = df.loc[4].values[0:-1]
# 创建一个空的dataframe
result_df = pd.DataFrame()
# 将row_data追加到df中
result_df = result_df._append(row_data)
pandas的loc方法获取到的row_data是numpy.ndarray类型。
Dataframe中可以追加Dataframe/Series类型,但不支持追加numpy.ndarray类型的数据。
解决方法
将numpy.ndarray先转换成Dataframe类型,再添加到Dataframe中。
添加row_data = pd.DataFrame(row_data)这一行即可。
修改后的完整代码如下。
# 读取指定的excel文件
df = pd.read_excel(r"D:\Test\src1.xlsm",header=None)
# 获取第5行的值
row_data = df.loc[4].values[0:-1]
print(type(row_data))
# 将row_data转换成Dataframe类型
row_data = pd.DataFrame(row_data)
print(type(row_data))
# 创建一个空的dataframe
result_df = pd.DataFrame()
# 将row_data追加到df中
result_df = result_df._append(row_data)
print输出type(row_data),可以看到row_data类型发生了改变:
通过这种方式解决了append追加数据时的问题。