Saya memiliki DataFrame berikut dari kueri SQL:
(Pdb) pp total_rows
ColumnID RespondentCount
0 -1 2
1 3030096843 1
2 3030096845 1
dan saya ingin menggerakkannya seperti ini:
total_data = total_rows.pivot_table(cols=['ColumnID'])
(Pdb) pp total_data
ColumnID -1 3030096843 3030096845
RespondentCount 2 1 1
[1 rows x 3 columns]
total_rows.pivot_table(cols=['ColumnID']).to_dict('records')[0]
{3030096843: 1, 3030096845: 1, -1: 2}
tapi saya ingin memastikan 303 kolom dicor sebagai string, bukan bilangan bulat sehingga saya mendapatkan ini:
{'3030096843': 1, '3030096845': 1, -1: 2}
astype("string")
daripadaastype(str)
untuk beberapa alasan yang cukup bagus, lihatlah.Jawaban:
Salah satu cara untuk mengonversi ke string adalah menggunakan astype :
Namun, mungkin Anda mencari
to_json
fungsi tersebut, yang akan mengonversi kunci menjadi json yang valid (dan karenanya kunci Anda menjadi string):Catatan: Anda dapat mengirimkan buffer / file untuk menyimpan ini, bersama dengan beberapa opsi lain ...
sumber
to_json()
mungkin tidak memanggilastype(str)
karena meninggalkan datetime64 dan subkelasnya sebagai milidetik sejak zaman.Jika Anda perlu mengonversi SEMUA kolom menjadi string, Anda cukup menggunakan:
Ini berguna jika Anda membutuhkan semuanya kecuali beberapa kolom untuk menjadi string / objek, lalu kembali dan ubah yang lain menjadi apa pun yang Anda butuhkan (integer dalam hal ini):
sumber
Ini yang lain, sangat berguna untuk mengonversi banyak kolom menjadi string, bukan hanya satu kolom:
sumber
Gunakan .astype (str)
Ex:
Biarkan d menjadi DataFrame Pandas
d['Column_name'].astype(str)
sumber
panda> = 1.0: Saatnya untuk berhenti menggunakan
astype(str)
!Sebelum panda 1.0 (sebenarnya, 0,25 sebenarnya) ini adalah cara defacto untuk mendeklarasikan Seri / kolom sebagai string:
Dari panda 1.0 dan seterusnya, pertimbangkan untuk menggunakan
"string"
tipe .Inilah sebabnya, seperti dikutip oleh dokumen:
Lihat juga bagian tentang Perbedaan Perilaku antara
"string"
danobject
.Jenis ekstensi (diperkenalkan pada 0,24 dan diformalkan dalam 1,0) lebih dekat ke panda daripada numpy, yang baik karena tipe numpy tidak cukup kuat. Misalnya NumPy tidak memiliki cara untuk mewakili data yang hilang dalam data integer (sejak
type(NaN) == float
). Tetapi panda dapat menggunakan kolom Nullable Integer .Mengapa saya harus berhenti menggunakannya?
Pencampuran dtypes secara tidak sengaja
Alasan pertama, seperti yang dijelaskan dalam dokumen adalah bahwa Anda dapat secara tidak sengaja menyimpan data non-teks dalam kolom objek.
Menantang untuk membedakan string dan objek python
lainnya Contoh contoh nyata lainnya adalah bahwa lebih sulit untuk membedakan antara "string" dan "objek". Objek pada dasarnya adalah tipe selimut untuk semua jenis yang tidak mendukung vectorizable operasi yang dapat di .
Mempertimbangkan,
Hingga panda 0,25, hampir tidak ada cara untuk membedakan bahwa "A" dan "B" tidak memiliki tipe data yang sama.
Dari panda 1.0, ini menjadi jauh lebih sederhana:
Keterbacaan
Ini cukup jelas ;-)
OK, jadi haruskah saya berhenti menggunakannya sekarang?
...Tidak. Pada penulisan jawaban ini (versi 1.1), tidak ada manfaat kinerja tetapi dokumen mengharapkan peningkatan di masa mendatang untuk secara signifikan meningkatkan kinerja dan mengurangi penggunaan memori untuk
"string"
kolom yang bertentangan dengan objek. Namun demikian, tidak pernah terlalu dini untuk membentuk kebiasaan baik!sumber
Menggunakan
.apply()
denganlambda
fungsi konversi juga berfungsi dalam hal ini:total_rows['ColumnID'] = total_rows['ColumnID'].apply(lambda x: str(x))
Untuk seluruh kerangka data yang dapat Anda gunakan
.applymap()
. (tapi bagaimanapun juga mungkin.astype()
lebih cepat)sumber