Фрейм данных Panda добавляет дополнительные столбцы в файл .csv при редактировании определенных значений

#python #pandas #dataframe

Вопрос:

Я использую фрейм данных Panda для хранения некоторой информации для моего кода. В моем коде,

Начальное состояние csv:

 ...............
ID,Name

...............
 

Добавление данных в фрейм данных:

 name_desc = {"ID": 23523223, "Name": BlahBlah}  
df = df.append(name_desc, ignore_index=True)
 

Это был мой фрейм данных panda при создании базы данных:

 ....................
,ID,Name
0,23523223,BlahBlah
....................
 

Ниже приведен мой код, который выполняет поиск по столбцу идентификатора, чтобы найти строку с указанным идентификатором (name_desc[«ИДЕНТИФИКАТОР»]).

 df.loc[df["ID"] == name_desc["ID"], "Name"] = name_desc["Name"]
 

Проблема, с которой я столкнулся, заключалась в том, что после редактирования имени я получаю результирующую базу данных, которая выглядит так:

 ................................
   Unnamed: 0         ID   Name
0           0   23523223  BlahBlah
................................
 

Если я буду постоянно выполнять:

 df.loc[df["ID"] == name_desc["ID"], "Name"] = name_desc["Name"]
 

Я получаю эту базу данных:

 ..................................    
,Unnamed: 0,Unnamed: 0.1,ID,Name
0,0,0,235283335,Dinese
..................................  
 

Я не могу понять, почему во время внесения изменений в мою базу данных добавляются дополнительные столбцы.

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

1. Я предполагаю, что бла-бла-это строка. Вы уверены, что ваш df создан таким образом? Потому что из того, что я там вижу, сразу после создания df у вас уже есть 3 столбца (перед идентификатором есть запятая), что не имеет смысла с данными, которые вы вставили в name_desc. Ты уверен?

2. Попробуйте проверить столбцы, которые у вас есть в вашем df, после создания с помощью print(df.columns)

Ответ №1:

Я думаю, что у вас есть проблема, связанная с созданием df. Приведенный здесь пример не возвращает то, что вы показываете:

 BlahBlah = 'foo'
name_desc = {"ID": 23523223, "Name": BlahBlah}  
df = pd.DataFrame(data=name_desc, index=[0])

print(df.columns) # it returns an Index(['ID', 'Name'], dtype='object')
print(len(df.columns)) # it returns 2, the number of your df columns
 

Если вы можете, попробуйте найти, какая инструкция добавляет дополнительный столбец в ваш код. В противном случае вы можете удалить столбец с помощью drop и удалить столбец с именем «как». inplace используется для фактического изменения фрейма данных. если inplace не добавлен, вы просто создаете представление фрейма данных, фактически не изменяя его:

 df.drop(columns = [''], inplace = True)
 

Наконец, я публикую ниже полный пример. Я предполагаю, что ваш df каким-то образом создан с пустым столбцом в начале, поэтому я также добавляю его в словарь:

 BlahBlah = 'foo'
name_desc = {'':'',"ID": 23523223, "Name": BlahBlah}  # I added an empty column 
df = pd.DataFrame(data=name_desc, index = [0])

print(df.columns) # Index(['', 'ID', 'Name'], dtype='object')

df.drop(columns = [''],inplace = True)
df.loc[df["ID"] == name_desc["ID"], "Name"] = name_desc["Name"]

print(df.columns) # Index(['ID', 'Name'], dtype='object')
 

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

1. Я внес правку в свой вопрос, надеюсь, он будет понятнее. Извините за неясный вопрос.