Python DataFrame追加行在最后一列掉落

时间:2018-06-27 09:54:39

标签: python pandas

在将行添加到熊猫中的数据框时遇到麻烦。

从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?

1 个答案:

答案 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']] 

无需重新排列非法字符,它就可以正常工作。