在将行添加到熊猫中的数据框时遇到麻烦。
从Excel工作表读取数据并将其放入DataFrame。这是一个样例:
CREATE FUNCTION public.round_minutes(timestamp without time zone, integer) RETURNS timestamp without time zone
代码:
import pandas as pd
df1 = pd.DataFrame({'date': ['22-jun-18', '22-jun-18', '22-jun-18'],
'id': ['1', '2', '3', ]
'name': ['Mark', 'Kate', 'Rollo' ]
'errors': ['10', '20', '30' ]
'status': ['failed', 'failed', 'failed', ]
'comment': ['Reason: invalid id', 'Reason: invalid id', 'Reason: invalid id']
'system': ['X', 'X', 'X' ]
'version': ['1.1', '1.1', '1.1' ]
'producer': ['Sys', 'Sys', 'Sys' ]})
使用ID从find_row = searchById(row['ID'], df1)
返回一行,效果很好。打印显示一行和所有列以及数据。
并且:
df1
添加行,但将df2 = df2.append(find_row, ignore_index=True)
放在最后一列。
NaN
对象在打印时看起来像这样:
find_row
总共9个值,没有问题。追加到新的DataFrame后,它显示如下:
date 22-jun-18
id 2
name Kate
errors 20
status failed
comment Reason: invalid id
system X
version 1.1
producer Sys
Name: 2, dtype: object
除第9列(现在为 date id name errors status comment system version producer
0 22-jun-18 86758 Kate 20 failed Reason: Invalid id System X 1.1 NaN
)外,其他所有内容均正常运行。
这里是NaN
函数。如前所述,它将返回一个对象,其中包含我需要的所有数据
searchById
是def searchById(id, df):
for index, row in df.iterrows():
if(row['key'] == id):
return row
return None
函数的问题,还是我以错误的方式处理行和DataFrame?
答案 0 :(得分:0)
我发现它消失了。因为行将以错误的顺序排列,所以我使用了一行来重新排列列。确切为什么消失了,我不确定。最后一列(Ø)中可能存在非法字符。
header_list = ['date','id','name', 'errors', 'status', 'comment', 'system', 'version', 'producer']
df= pd.DataFrame(columns = header_list)
我现在正在使用
df=df [['date','id','name', 'errors', 'status', 'comment', 'system', 'version', 'producer']]
无需重新排列非法字符,它就可以正常工作。