Почему в сохраненном CSV-файле нет столбца? - PullRequest
0 голосов
/ 19 июня 2020

Вывод моего groupby имеет столбцы, даже если набор данных пуст.

Учитывая это, у меня есть набор данных ниже, и я сохранил его в файле *.csv:

dict = {
    'facility':[],
    'patient_ID':[],
    'year':[],
    'month':[],
    'polyp_No':[]
}
dt =  pd.DataFrame(dict)
dt.to_csv("test.csv", sep=',', encoding='utf-8', index=False)

, а затем я прочитал этот файл, как показано ниже:

dt = pd.read_csv("test.csv")
print(dt)                                            # Just to observe columns
print("----------------------------")

Наконец, когда я выполняю простую группировку и распечатываю набор данных

dt = dt.groupby(by=['facility','patient_ID','year','month'], as_index=False).sum()
print(dt)

Он печатает приведенный ниже набор данных с НЕТ столбцов:

Empty DataFrame
Columns: []
Index: []

Мой вопрос: почему нет столбца? Я ожидал увидеть столбцы!

Точка:

Если вы удалите строки чтения и записи, появятся столбцы, поэтому я считаю, что это может быть проблема read_csv и to_csv, но я не знаю, как ее решить! Пожалуйста, попробуйте следующий код

dict = {
    'facility':[],
    'patient_ID':[],
    'year':[],
    'month':[],
    'polyp_No':[]
}
dt =  pd.DataFrame(dict)
#dt.to_csv("test.csv", sep=',', encoding='utf-8', index=False)

#dt = pd.read_csv("test.csv")
#print(dt)
#print("----------------------------")

dt = dt.groupby(by=['facility','patient_ID','year','month'], as_index=False).sum()
print(dt)

1 Ответ

0 голосов
/ 19 июня 2020

Я думаю, это потому, что все столбцы имеют тип object dtype

print(dt.dtypes)

facility      object
patient_ID    object
year          object
month         object
polyp_No      object
dtype: object

, если вы преобразовываете столбцы в целые числа, тогда столбцы возвращаются, как ожидалось.

print(dt.astype(int).groupby(by=['facility','patient_ID','year','month']
                             ,as_index=False).sum())

Empty DataFrame
Columns: [facility, patient_ID, year, month, polyp_No]
Index: []

если вы используете строковые методы, он работает должным образом.

print(dt.groupby(by=['facility','patient_ID','year','month']
                    ,as_index=False).first())


Empty DataFrame
Columns: [facility, patient_ID, year, month, polyp_No]
Index: []
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...