Pandas / Numpy - Очистка данных - импорт csv, - экспорт в csv теряет переменные записи - PullRequest
0 голосов
/ 16 февраля 2020

Я хочу импортировать три больших файла 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))

heatmap to show concatenated .csv x 3 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

[heatmap for reimported concat .csv 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...