Pandas concat неожиданно добавляет NA строк

#python #pandas #dataframe #concatenation

#python #pandas #фрейм данных #конкатенация

Вопрос:

Я перебираю объект JSON для создания фрейма данных. Файл JSON содержит текстовую таблицу только с 1 столбцом в таблице. Я хочу перебрать каждую «строку» в объекте JSON, создать фрейм данных этой строки, а затем добавить этот фрейм данных строки в другой фрейм данных. Я пробовал как append, так и pd.concat, и я не получаю ожидаемых результатов. Я получаю фрейм данных, полный NAs и 2 столбцов вместо 1.

Результат columns_name_list есть ['1'] .

Результат row_df.columns есть Index(['1'], dtype='object') .

Я запустил:

 new_df = pd.DataFrame(columns=[column_names_list], index=[0])
print("----------")
print("new_df:n")
print(new_df)
print("----------nn")

for i in range(1,num_rows 1):
    print("---")
    print(i)
    
    row_df = pd.DataFrame(document_data["tableList"][0]["rowMap"][str(i)]["columns"], index=[0])
    print(row_df, "nn")
    
    new_df = pd.concat([new_df, row_df], axis=0)
    print("Concatenated df:n")
    print(new_df, "n")
    print("---nnn")

new_df = new_df.dropna()
new_df = new_df.reset_index(drop=True)
new_df
 

… который выдает вывод:

 ----------
new_df:

     1
0  NaN
----------


---
1
                                 1
0  EFG intercompany debtor- ABC  


Concatenated df:

     1    1
0  NaN  NaN
0  NaN  NaN 

---



---
2
                                                   1
0  As reported on 29 December 2003, the only subs... 


Concatenated df:

     1    1
0  NaN  NaN
0  NaN  NaN
0  NaN  NaN 

---

     1    1

 

Вывод показывает, что row_df не содержит NA, но в результате конкатенации строки заполнены NAs и неожиданно добавлен дополнительный столбец.

Ожидаемый результат:

 ----------
new_df:

     1
0  NaN
----------


---
1
                                 1
0  EFG intercompany debtor- ABC  


Concatenated df:

     1    
0  NaN
0  EFG intercompany debtor- ABC  

---



---
2
                                                   1
0  As reported on 29 December 2003, the only subs... 


Concatenated df:

     1    
0  NaN
0  EFG intercompany debtor- ABC  
0  As reported on 29 December 2003, the only subs...

---

     1    
0  EFG intercompany debtor- ABC  
1  As reported on 29 December 2003, the only subs...

 

Для контекста JSON для первого и второго экземпляров row_df является:

 {'columns': {'1': 'EFG intercompany debtor- ABC '}}
{'columns': {'1': "As reported on 29 December 2003, the only subs..."}}
 

Что я делаю не так и как я могу это исправить?

Комментарии:

1. Одна row_df.columns из идей заключается в том, что строки и исходные имена столбцов являются целыми числами, можно ли это проверить?

2. Пожалуйста, предоставьте достаточный пример JSON для воспроизведения проблемы.

3. Я добавил объекты JSON, из которых считываются экземпляры row_df.

4. @jezrael Вывод columns_name_list is ['1'] . Результат row_df.columns есть Index(['1'], dtype='object') .