Я объединил два файла .csv в два отдельных кадра данных pandas для предварительной обработки. Кадрами данных являются «properties_data» и «customers_data». Вызов и переименование не работают для первого импортированного столбца («id» и «customerid» соответственно) обоих фреймов данных. Что может быть не так? Заранее благодарю за помощь!
Вот код с выводом для кадра данных «properties_data» (запускается в среде Jupyter):
import pandas as pd
properties = pd.read_csv("properties.csv", usecols = range(1,10))
properties_data = properties.copy()
properties_data.index.name = 'propertiesIndex'
properties_data.rename(columns = {'id': 'propertyId', 'date_sale': 'dateSale', 'property#': 'propertyNo', 'customerid' : 'customerId'}, inplace=True)
properties_data.dtypes
Вывод показывает, что имя столбца «id» не изменилось на «propertyId»:
id int64
building int64
dateSale object
type object
propertyNo int64
area float64
price object
status object
customerId object
dtype: object
Другие столбцы являются вызываемыми:
properties_data.loc[: ,'dateSale']
# or properties_data.dateSale
# Giving output:
propertiesIndex
0 11/1/2005
1 10/1/2005
2 7/1/2007
3 12/1/2007
4 11/1/2004
Name: dateSale, dtype: object
Но столбец «id» (или «propertyId» на всякий случай) не является:
properties_data.loc[: ,'id']
# or properties_data.id
# Giving a long error massage ending with:
KeyError: 'id'
То же самое относится и к фрейму данных «customers_data»:
customers = pd.read_csv("customers.csv", usecols = [i for i in range(1,13)])
customers_data = customers.copy()
customers_data.index.name = 'customersIndex'
customers_data.rename(columns = {'customerid' : 'customerId', 'birth_date': 'birthDate', 'deal_satisfaction': 'dealSatisfaction'}, inplace=True)
customers_data.dtypes
Там выходные данные показывают, что имя столбца «customerid» не изменилось на «customerId»:
customerid object
entity object
name object
surname object
birthDate object
sex object
country object
state object
purpose object
dealSatisfaction int64
mortgage object
source object
dtype: object
Опять же, другие столбцы доступны для вызова:
customers_data.loc[: ,'entity']
# or customers_data.entity
# Giving output:
customersIndex
0 Individual
1 Individual
2 Individual
3 Individual
4 Company
Name: entity, dtype: object
Но столбец «customerid» (или «customerId» на всякий случай) не является:
customers_data.loc[: ,'customerid']
# or customers_data.customerid
#Again, a long error massage ending with:
KeyError: 'customerid'
Вот образец файла «properties.csv» для кадра данных «properties_data»:
,id,building,date_sale,type,property#,area,price,status,customerid
0,1030,1,11/1/2005,Apartment,30,743.09,"$246,172.68 ", Sold , C0028
1,1029,1,10/1/2005,Apartment,29,756.21,"$246,331.90 ", Sold , C0027
2,2002,2,7/1/2007,Apartment,2,587.28,"$209,280.91 ", Sold , C0112
3,2031,2,12/1/2007,Apartment,31,1604.75,"$452,667.01 ", Sold , C0160
4,1049,1,11/1/2004,Apartment,49,1375.45,"$467,083.31 ", Sold , C0014
Вот образец файла «customers.csv» для кадра данных «customers_data»:
,customerid,entity,name,surname,birth_date,sex,country,state,purpose,deal_satisfaction,mortgage,source
0,C0110,Individual,Kareem,Liu,5/11/1968,F,USA,California,Home,4,Yes,Website
1,C0010,Individual,Trystan,Oconnor,11/26/1962,M,USA,California,Home,1,No,Website
2,C0132,Individual,Kale,Gay,4/7/1959,M,USA,California,Home,4,Yes,Agency
3,C0137,Individual,Russell,Gross,11/25/1959,M,USA,California,Home,5,No,Website
4,C0174,Company,Marleez,Co,,,USA ,California,Investment,5,No,Website
или ставьте лайк print(pd.read_csv("properties.csv", usecols = range(1,10)).get('id', 'id columns doesnt exist'))
. KeyError: 'id'
означает, что столбца с именем «id» нет.
@PandaKim, print(pd.read_csv("properties.csv", usecols = range(1,10)).columns)
возвращает "Index(['id', 'building', 'date_sale', 'type', 'property#', 'area', 'price', 'status', 'customerid'], dtype=' object')», а print(pd.read_csv("properties.csv", usecols = range(1,10)).get('id', 'id columns doesnt exist'))
возвращает «столбцы идентификаторов не существуют».
Кажется, есть столбец, похожий на «id», но в конечном итоге результат говорит нам вот что: «столбцы с идентификаторами не существуют».
Да, это очень странно!
Решение состоит в том, что перед «id» и «customerid» соответственно был невидимый символ, который нужно было удалить в двух файлах CSV. Таким образом, два столбца или серии были созданы как «[невидимый символ]id» и «[невидимый символ]customerid», что сделало невозможным их вызов и переименование. Забавно, что когда я копирую фрагменты образцов csv, которыми поделился здесь, эти невидимые символы разрешаются, и код работает так, как ожидалось.
ок
print(pd.read_csv("properties.csv", usecols = range(1,10)).columns)