#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. Я внес правку в свой вопрос, надеюсь, он будет понятнее. Извините за неясный вопрос.