Mohon maaf jika fitur ini telah disarankan sebelumnya. Banyak fungsi IO (misalnya read_csv
) memungkinkan penggunaan untuk menentukan format setiap kolom dengan mudah menggunakan kamus. Sejauh yang saya mengerti, ini bukan
mungkin dengan konstruksi kerangka data biasa, misalnya:
df = pd.DataFrame(data=data, columns=columns, dtypes={'colname1': str, 'colname2': np.int})
Bahkan lebih baik lagi , akan lebih bagus jika seseorang dapat mengubah dtypes
untuk kolom kerangka data menggunakan konstruksi serupa, misalnya:
df.change_types({'colname1': str, 'colname2': np.int})
Apakah hal seperti ini sudah direncanakan?
lihat #9133 dan #4464 itu tidak terlalu sulit
ingin mencoba?
Cara ini benar-benar berfungsi:
data_df = data_df.astype( dtype= {"wheel_number":"int64", "car_name":"object","minutes_spent":"float64"})
Satu perbedaan antara read_csv( csvFile, dtype={..} )
dan df.astpye(dtype={..} )
:
Dalam kasus read_csv, tidak apa-apa jika dict yang disediakan berisi lebih banyak kolom yang tidak ada di csv, mereka diabaikan dengan anggun. Dalam kasus astype()
, itu kesalahan jika semua kolom yang ditentukan tidak ada dalam data.
Seharusnya lebih seperti read_csv. Karena kita dapat memiliki dict masuk yang mungkin memiliki beberapa kolom dan bukan yang lain. Sekarang ini adalah solusi yang harus saya lakukan:
df = pd.DataFrame( incoming_data )
gtfs_dtypes = { ... } # my master dtypes dict, having all possible column names
gtfs_dtypes_specific = { x:gtfs_dtypes.get(x,'str') for x in df.columns.tolist() }
df = df.astype(dtype=gtfs_dtypes_specific)
Komentar yang paling membantu
Cara ini benar-benar berfungsi:
data_df = data_df.astype( dtype= {"wheel_number":"int64", "car_name":"object","minutes_spent":"float64"})