Я хочу импортировать три больших файла Excel в формате .CSV в pandas и объединить их. Все они имеют 128 переменных (некоторые Int, некоторые категориальные, некоторые строки и некоторые даты.) И 200 000 записей.
Я получаю «Предупреждение типа: столбцы (124,125,126,127) имеют смешанные типы». На самом деле это не проблема, поскольку последние четыре поля в основном пустые.
Я импортировал 3 .csv, используя pandas .read_csv (). Это дает мне df1, df2, df3. Все хорошо и без потери данных.
- для отображения цифр c столбцов
df4_numeric = df4.select_dtypes(include=[np.number])
numeric_cols = df4_numeric.columns.values
print(numeric_cols)
['fyear' 'ADMIAGE' 'ADMINCAT' 'ADMISORC' 'CLASSPAT' 'NNAP_CONSULT'
'DISDEST' 'DISMETH' 'EPIKEY' 'EPIORDER' 'EPISTAT' 'EPITYPE' 'IMD04'
'IMD04HD' 'INTMANIG' 'MAINSPEF' 'SEX' 'STARTAGE' 'SUSSPELLID']
- и для отображения не цифр c столбцов
df4_non_numeric = df4.select_dtypes(exclude=[np.number])
non_numeric_cols = df4_non_numeric.columns.values
print(non_numeric_cols)
['ADMIDATE' 'ADMIMETH' 'DIAG_01' 'DIAG_02' 'DIAG_03' 'DIAG_04' 'DIAG_05'
'DIAG_06' 'DIAG_07' 'DIAG_08' 'DIAG_09' 'DIAG_10' 'DIAG_11' 'DIAG_12'
'DIAG_13' 'DIAG_14' 'DIAG_15' 'DIAG_16' 'DIAG_17' 'DIAG_18' 'DIAG_19'
'DIAG_20' 'Diag_4_01' 'DISDATE' 'DOMPROC' 'ENCRYPTED_HESID' 'EPIEND'
'EPISTART' 'ETHNOS' 'LSOA01' 'LSOA11' 'OPDATE_01' 'OPDATE_02' 'OPDATE_03'
'OPDATE_04' 'OPDATE_05' 'OPDATE_06' 'OPDATE_07' 'OPDATE_08' 'OPDATE_09'
'OPDATE_10' 'OPDATE_11' 'OPDATE_12' 'OPDATE_13' 'OPDATE_14' 'OPDATE_15'
'OPDATE_16' 'OPDATE_17' 'OPDATE_18' 'OPDATE_19' 'OPDATE_20' 'OPDATE_21'
'OPDATE_22' 'OPDATE_23' 'OPDATE_24' 'OPERTN_01' 'OPERTN_02' 'OPERTN_03'
'OPERTN_04' 'OPERTN_05' 'OPERTN_06' 'OPERTN_07' 'OPERTN_08' 'OPERTN_09'
'OPERTN_10' 'OPERTN_11' 'OPERTN_12' 'OPERTN_13' 'OPERTN_14' 'OPERTN_15'
'OPERTN_16' 'OPERTN_17' 'OPERTN_18' 'OPERTN_19' 'OPERTN_20' 'OPERTN_21'
'OPERTN_22' 'OPERTN_23' 'OPERTN_24' 'OPERTN_4_01' 'POSTDIST' 'PROCODE5'
'SITETRET' 'TRETSPEF' 'DOD' 'opertn_01Type' 'opertn_02Type'
'opertn_03Type' 'opertn_04Type' 'opertn_05Type' 'opertn_06Type'
'opertn_07Type' 'opertn_08Type' 'opertn_09Type' 'opertn_10Type'
'opertn_11Type' 'opertn_12Type' 'opertn_13Type' 'opertn_14Type'
'opertn_15Type' 'opertn_16Type' 'opertn_17Type' 'opertn_18Type'
'opertn_19Type' 'opertn_20Type' 'opertn_21Type' 'opertn_22Type'
'opertn_23Type' 'opertn_24Type']
просто просматривая данные, нет потери полей данных, и я использовал
cols = df4.columns[:128] # all variables
colours = ['#000099', '#ffff00'] # specify the colours - yellow is missing. blue is not missing.
sns.heatmap(df4[cols].isnull(), cmap=sns.color_palette(colours))
1
Так что я не думаю, Я потерял любые данные. Это правильная картина. Данные представляют собой данные о хирургической активности в больнице, и есть много пустых полей, например, записи относятся к одному госпитализации, и имеется достаточно переменных, чтобы можно было описать 25 операций (не дай бог), 25 дат операции, 25 диагнозов и т. Д. c и у большинства пациентов будет только несколько (1-4). В конце концов я хочу вытащить этот df4 в Stata.
- Однако, когда я экспортирую этот df4 (сцепленный df1, df2, df3) обратно в CSV, CSV теряет записи примерно в трети переменных столбца. (см. тепловую карту ниже)
Если я затем повторно импортирую .csv обратно в pandas, я получаю следующую ошибку Dtype
DtypeWarning: Columns (3,4,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,34,35,38,41,45,46,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,100,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128) have mixed types.Specify dtype option on import
[ 2
Я подозреваю, что способ сделать это - очистить столбцы при входе и, возможно, отбросить некоторые столбцы, хотя я не думаю, что это проблема. Я хотел бы узнать лучший способ определить переменные типы данных при импорте, - я не знаю, как это сделать, кроме как просмотреть их все в Excel?
Тепловая карта показывает потерю dta в первом кадре данных (df1) - тот, который дал ошибку dtype переменных 124, 125, 126 и 127. При импорте и конкатенации не было пропущено ни одного dta, поэтому это должно быть связано с экспортом в csv.
Проблемный c dataframe - это тот, у которого потеряны значения - (= df1) pd.read_csv пожаловался на последние 4 столбца со смешанным dtype, поэтому я изменил dtype
pd.read_csv('/Users/....base_data/2014_2013.csv',sep=',', dtype={'opertn_21Type': str,
'opertn_22Type': str,
'opertn_23Type': str,
'opertn_24Type': str})
df1.head ()
fyear ADMIDATE ADMIMETH ADMINCAT ADMISORC CLASSPAT \
0 2014 29/07/2014 22 1 19 1
1 2014 06/06/2014 12 1 19 1
2 2014 23/06/2014 11 1 19 1
3 2014 19/07/2014 2B 1 51 1
4 2014 12/12/2014 11 1 19 1
... ... ... ... ... ... ...
202451 2013 32 22/04/2013 21 1 19 1
202452 2013 80 12/06/2013 28 1 51 1
202453 2013 60 01/08/2013 21 1 19 1
202454 2013 25 22/03/2013 21 1 19 1
202455 2013 33 06/08/2013 11 1 19 1
NNAP_CONSULT DIAG_01 DIAG_02 ... opertn_15Type opertn_16Type \
0 921 R69X6 NaN ... NaN NaN
1 319 R69X6 NaN ... NaN NaN
2 861 Z438 Z538 ... NaN NaN
3 327 R69X6 NaN ... NaN NaN
4 1058 M512- M4806 ... NaN NaN
... ... ... ... ... ...
202451 738 O994 I630 ... NaN NaN
202452 788 D320 G401 ... NaN NaN
202453 471 S1210 G20X ... NaN NaN
202454 420 S3200 I269 ... NaN NaN
202455 354 D320- H549- ... NaN NaN
opertn_17Type opertn_18Type opertn_19Type opertn_20Type opertn_21Type \
0 NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN
2 NaN NaN NaN NaN NaN
3 NaN NaN NaN NaN NaN
4 NaN NaN NaN NaN NaN
... ... ... ... ...
202451 NaN NaN NaN NaN NaN
202452 NaN NaN NaN NaN NaN
202453 NaN NaN NaN NaN NaN
202454 NaN NaN NaN NaN NaN
202455 NaN NaN NaN NaN NaN
opertn_22Type opertn_23Type opertn_24Type
0 NaN NaN NaN
1 NaN NaN NaN
2 NaN NaN NaN
3 NaN NaN NaN
4 NaN NaN NaN
... ... ...
202451 NaN NaN NaN
202452 NaN NaN NaN
202453 NaN NaN NaN
202454 NaN NaN NaN
202455 NaN NaN NaN
[202456 rows x 128 columns]
Я сожалею, что .head () - беспорядок, кажется, нет хорошего способа вставки копий из ячеек Юпитера. Вы можете видеть, что есть много значений Null. Поэтому, когда я объединяю 3 кадра данных, у меня нет пропущенных данных.
pd.concat([df1, df2, df3], ignore_index = True)
Затем я использую
df4.to_csv('all_6years.csv')
, и именно в этот момент данные теряются из df1.