পান্ডায় কলামগুলি স্ট্রিংয়ে রূপান্তর করুন


179

আমার কাছে এসকিউএল কোয়েরি থেকে নিম্নলিখিত ডেটাফ্রেম রয়েছে:

(Pdb) pp total_rows
     ColumnID  RespondentCount
0          -1                2
1  3030096843                1
2  3030096845                1

এবং আমি এটি এটিকে মূল রূপ দিতে চাই:

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}

তবে আমি নিশ্চিত করতে চাই যে 303 টি কলামগুলি পূর্ণসংখ্যার পরিবর্তে স্ট্রিং হিসাবে কাস্ট করা হয়েছে যাতে আমি এটি পাই:

{'3030096843': 1, '3030096845': 1, -1: 2}

উত্তর:


332

স্ট্রিংতে রূপান্তর করার একটি উপায় হ'ল অ্যাস্টাইপ ব্যবহার করা :

total_rows['ColumnID'] = total_rows['ColumnID'].astype(str)

তবে, সম্ভবত আপনি খুঁজছেন to_json ফাংশনটির সন্ধান করছেন, যা কীগুলি বৈধ জাসন (এবং এর ফলে আপনার কীগুলি স্ট্রিংগুলিতে) রূপান্তর করবে:

In [11]: df = pd.DataFrame([['A', 2], ['A', 4], ['B', 6]])

In [12]: df.to_json()
Out[12]: '{"0":{"0":"A","1":"A","2":"B"},"1":{"0":2,"1":4,"2":6}}'

In [13]: df[0].to_json()
Out[13]: '{"0":"A","1":"A","2":"B"}'

দ্রষ্টব্য: আপনি অন্য কিছু বিকল্পের সাথে এটিকে সংরক্ষণ করতে বাফার / ফাইলে পাস করতে পারেন ...


3
আমি মনে করি to_string () NULLs মানের সংরক্ষণ কারণে বাঞ্ছনীয় stackoverflow.com/a/44008334/3647167
কিথ

1
@ কীথ নাল সংরক্ষণ আকর্ষণীয়। তবে ডকটি বলেছে যে এর উদ্দেশ্য 'একটি কনসোল-বান্ধব ট্যাবুলার আউটপুটটিতে একটি ডেটা ফ্রেম রেন্ডার করা'। আমি চাই যে কোনও ব্যক্তির পক্ষে ওজন করা উচিত
পিট

to_json()astype(str)যুগের পর থেকে ডেটটাইম 64 এবং এর সাবক্ল্যাসগুলি মিলিসেকেন্ড হিসাবে ছেড়ে যাওয়ার কারণে সম্ভবত কল করবে না ।
সুস্চ

1
@ সুছ আমার সন্দেহ হয়েছে কারণ জসনের স্পষ্ট ডেটটাইম ফর্ম্যাট নেই, তাই আপনি মহাকাব্য ব্যবহার করতে বাধ্য হবেন। যা বলতে হয়, আমি মনে করি এটি স্ট্যান্ডার্ড।
অ্যান্ডি হেডেন

49

আপনার যদি সমস্ত কলামগুলিকে স্ট্রিংয়ে রূপান্তর করতে হয় তবে আপনি কেবল ব্যবহার করতে পারেন:

df = df.astype(str)

স্ট্রিং / অবজেক্ট হওয়ার জন্য কয়েকটি কলাম ব্যতীত আপনার যদি সমস্ত কিছু প্রয়োজন হয় তবে এটি দরকারী then

 df[["D", "E"]] = df[["D", "E"]].astype(int) 

28

এখানে অন্য একটি রয়েছে, বিশেষত একক কলামের পরিবর্তে একাধিক কলামকে স্ট্রিংয়ে রূপান্তর করতে কার্যকর :

In [76]: import numpy as np
In [77]: import pandas as pd
In [78]: df = pd.DataFrame({
    ...:     'A': [20, 30.0, np.nan],
    ...:     'B': ["a45a", "a3", "b1"],
    ...:     'C': [10, 5, np.nan]})
    ...: 

In [79]: df.dtypes ## Current datatype
Out[79]: 
A    float64
B     object
C    float64
dtype: object

## Multiple columns string conversion
In [80]: df[["A", "C"]] = df[["A", "C"]].astype(str) 

In [81]: df.dtypes ## Updated datatype after string conversion
Out[81]: 
A    object
B    object
C    object
dtype: object


0

.apply()একটি lambdaরূপান্তর ফাংশন ব্যবহার করেও এই ক্ষেত্রে কাজ করে:

total_rows['ColumnID'] = total_rows['ColumnID'].apply(lambda x: str(x))

পুরো ডেটাফ্রেমগুলির জন্য আপনি ব্যবহার করতে পারেন .applymap()। (তবে যে কোনও ক্ষেত্রে সম্ভবত .astype()দ্রুত)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.