পান্ডাস ডেটাফ্রেমের মধ্যে একটি কলামকে ইনট থেকে স্ট্রিংয়ে রূপান্তর করা


106

মিক্সড ইন এবং স্ট্র ডেটা কলাম সহ আমার পান্ডাসে একটি ডেটাফ্রেম রয়েছে। আমি ডেটাফ্রেমের মধ্যে প্রথমে কলামগুলি সংযুক্ত করতে চাই। এটি করতে আমাকে একটি intকলামে রূপান্তর করতে হবে str। আমি নিম্নলিখিত হিসাবে করার চেষ্টা করেছি:

mtrx['X.3'] = mtrx.to_string(columns = ['X.3'])

অথবা

mtrx['X.3'] = mtrx['X.3'].astype(str)

তবে উভয় ক্ষেত্রেই এটি কাজ করছে না এবং আমি "আরআর" এবং 'ইনট' অবজেক্টগুলিকে একত্রিত করতে পারি না "বলে ত্রুটি পাচ্ছি। দুটি strকলাম যুক্ত করে পুরোপুরি সূক্ষ্মভাবে কাজ করছে।


উত্তর:


137
In [16]: df = DataFrame(np.arange(10).reshape(5,2),columns=list('AB'))

In [17]: df
Out[17]: 
   A  B
0  0  1
1  2  3
2  4  5
3  6  7
4  8  9

In [18]: df.dtypes
Out[18]: 
A    int64
B    int64
dtype: object

একটি সিরিজ রূপান্তর

In [19]: df['A'].apply(str)
Out[19]: 
0    0
1    2
2    4
3    6
4    8
Name: A, dtype: object

In [20]: df['A'].apply(str)[0]
Out[20]: '0'

ফলাফলটি পুনরায় নির্ধারণ করতে ভুলবেন না:

df['A'] = df['A'].apply(str)

পুরো ফ্রেমটি রূপান্তর করুন

In [21]: df.applymap(str)
Out[21]: 
   A  B
0  0  1
1  2  3
2  4  5
3  6  7
4  8  9

In [22]: df.applymap(str).iloc[0,0]
Out[22]: '0'

df = df.applymap(str)

3
আমি কেন বুঝতে পারছি না, তবে mtrx ['X.3']। প্রয়োগ (str) আমার জন্যও কাজ করে না :( dtype এখনও int64 দেখায় 23 23177 সারি এবং X.3 কলামের ডেটাফ্রেমটি কেবল সংখ্যা পেয়েছে In । [21]: mtrx [ 'X.3'] আউট dtype [21]: dtype ( 'int64')
Malfet

0.7.0, উবুন্টু সিস্টেমে অজগর 2.7 নিয়ে আসুন
মালফেট

বর্তমান সংস্করণটি 0.12, আপনার আপগ্রেড করা উচিত।
জেফ

df ['A']। প্রয়োগ (str) কাজ করছে না। তবে df.column_name = df.column_name.astype (str) কাজ করে। কেন জানি না।
দিমিত্রি কোনোভালভ

1
পাইথন স্ট্রিংগুলিতে @ দিমিত্রিওনোলোভ অপরিবর্তনীয়, সুতরাং আপনি যখনই ডেটাটি ম্যানিপুলেট করবেন তখন আপনাকে ফলটি পরিবর্তনশীলটিতে ফিরিয়ে দিতে হবে।
শ্রীরাম অরবিন্দ লক্ষ্মণকুমার

92

ডেটা ফ্রেম কলামের ডেটা ধরণের পরিবর্তন করুন:

অন্তর্নির্মিত:

df.column_name = df.column_name.astype(np.int64)

টু স্ট্র

df.column_name = df.column_name.astype(str)


7
এটি আকর্ষণীয়, তবে এটি apply(str)ব্যবহার করে আমার পরীক্ষায় @ জেফের চেয়ে প্রায় 4x ধীর pd.Series(np.arange(1000000))
জন জুইনক

2
এটি আমার পক্ষে কাজ করে। df['A'] = df['A'].apply(str)কাজ করে। @ জেফের দেওয়া উত্তর আমার পক্ষে কাজ করে না।
tommy.carstensen

1
সংক্রান্ত @ JohnZwinck এর মন্তব্য, Python3 ব্যবহার করে এটি ব্যবহার করতে 2x মত আরো দ্রুত হিসাবে মনে করা হয় apply()পরিবর্তে astype(): timeit.Timer ( 'c.apply (STR)', সেটআপ = 'PD যেমন আমদানি পান্ডাস; পরিসর গ = pd.Series (( 1000)) ')' টাইমিট (1000) >>> 0.41499893204309046 >>> সময়কাল। টাইমার ('সি.স্টাইপ (স্ট্র))', সেটআপ = 'পিডি হিসাবে আমদানি করুন পান্ডস; সি = পিডি.সিরিজ (পরিসর (1000))' ) .টাইমাইট (1000) 0.8004439630312845
hamx0r

15

সতর্কতা : প্রদত্ত উভয় সমাধান ( অ্যাস্টাইপ () এবং প্রয়োগ () ) উভয়ই ন্যান বা নন ফর্মের মধ্যে নুল মান সংরক্ষণ করে না।

import pandas as pd
import numpy as np

df = pd.DataFrame([None,'string',np.nan,42], index=[0,1,2,3], columns=['A'])

df1 = df['A'].astype(str)
df2 =  df['A'].apply(str)

print df.isnull()
print df1.isnull()
print df2.isnull()

আমি বিশ্বাস করি এটি টু স্ট্রিং () এর প্রয়োগের মাধ্যমে স্থির হয়েছে


1
টো স্ট্রিং আপনাকে ন্যানের হ্যান্ডলিং চয়ন করতে দেয় যেমন 'নান' এর চেয়ে খালি স্ট্রিং ফিরে আসতে পারে
seanv507

1
(আমি দ্বিমত পোষণ করছিলাম না, আপনি যা বলেছিলেন তা কেবল প্রসারিত করে) - +1 বলতে চেয়েছিলেন
seanv507


0

কেবল একটি অতিরিক্ত রেফারেন্সের জন্য।

উপরের সমস্ত উত্তর একটি ডেটা ফ্রেমের ক্ষেত্রে কাজ করবে। তবে আপনি যদি কোনও কলাম তৈরি / সংশোধন করার সময় ল্যাম্বদা ব্যবহার করেন তবে এটি কাজ করবে না, কারণ সেখানে এটি পান্ডাস সিরিজের পরিবর্তে কোনও int গুণ হিসাবে বিবেচিত হয়। এটিকে স্ট্রিং হিসাবে তৈরি করতে আপনাকে str (টার্গেট_ট্রিবিউট) ব্যবহার করতে হবে। নীচের উদাহরণ উল্লেখ করুন।

def add_zero_in_prefix(df):
    if(df['Hour']<10):
        return '0' + str(df['Hour'])

data['str_hr'] = data.apply(add_zero_in_prefix, axis=1)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.