কিভাবে একটি ডেটা ফ্রেমে একটি খালি কলাম যুক্ত করবেন?


260

পান্ডাস DataFrameঅবজেক্টে খালি কলাম যুক্ত করার সহজ উপায় কী ? আমি যে হোঁচট খেয়েছি তা হ'ল এমন কিছু

df['foo'] = df.apply(lambda _: '', axis=1)

একটি কম বিকৃত পদ্ধতি আছে?


2
আপনি কি আসলে খালি স্ট্রিং যুক্ত কলাম চান বা বরং N/A?
চলচ্চিত্রকার

উত্তর:


419

আমি যদি সঠিকভাবে বুঝতে পারি তবে অ্যাসাইনমেন্টটি পূরণ করা উচিত:

>>> import numpy as np
>>> import pandas as pd
>>> df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]})
>>> df
   A  B
0  1  2
1  2  3
2  3  4
>>> df["C"] = ""
>>> df["D"] = np.nan
>>> df
   A  B C   D
0  1  2   NaN
1  2  3   NaN
2  3  4   NaN

2
এই উত্তরটি আমার জন্য সবেমাত্র নতুন সারি তৈরি করেছে।
লজিকব্লোক

@ ব্লগব্লোক আপনি কি উদাহরণ প্রদান করতে পারেন যেখানে এটি ঘটছে?
ক্রাইমাইকেল

@ ক্রিমিকেল কিছুক্ষণ হয়ে গেছে তবে আমি বিশ্বাস করি যে নাম্বার এবং নামযুক্ত সারিগুলির সাথে নাম্বার-সূচীযুক্ত কলামগুলি ছিল এবং এটি কেবল শেষে একটি নতুন সারি তৈরি করেছে।
13:59

1
যদি dfখালিটি থাকে, আপনি ব্যবহার করতে পারেন df['new'] = pd.Series() (নীচে আমার উত্তর দেখুন)
কার্স্টেন

একাধিক খালি কলাম কীভাবে যুক্ত করবেন?
এম মার্শিসি

46

এই সম্পর্কিত প্রশ্নে ডিএসএমের উত্তর যুক্ত করতে এবং তৈরি করতে আমি এই পদ্ধতিকে দুটি ক্ষেত্রে বিভক্ত করব:

  • একটি একক কলাম যুক্ত করা: নতুন কলামগুলিতে খালি মান নির্ধারণ করুন, যেমন df['C'] = np.nan

  • একাধিক কলাম যুক্ত করা হচ্ছে: ডেটাফ্রেমের কলাম সূচীতে নতুন কলামগুলি যুক্ত করতে আমি পান্ডার .reindex(columns=[...]) পদ্ধতিটি ব্যবহার করার পরামর্শ দেব । এটি এর সাথে একাধিক নতুন সারি যুক্ত করার জন্যও কাজ করে .reindex(rows=[...])। নোট করুন যে পান্ডাদের নতুন সংস্করণ (v> 0.20) আপনাকে axisস্পষ্টভাবে columnsবা এর উপর বরাদ্দ করার পরিবর্তে কোনও কীওয়ার্ড নির্দিষ্ট করার মঞ্জুরি দেয় rows

এখানে একাধিক কলাম যুক্ত করার উদাহরণ রয়েছে:

mydf = mydf.reindex(columns = mydf.columns.tolist() + ['newcol1','newcol2'])

অথবা

mydf = mydf.reindex(mydf.columns.tolist() + ['newcol1','newcol2'], axis=1)  # version > 0.20.0

আপনি বিদ্যমান ডেটাফ্রেমে সর্বদা একটি নতুন (খালি) ডেটাফ্রেমে সংলগ্ন করতে পারেন তবে এটি আমার কাছে পাইথোনিক হিসাবে মনে হয় না :)


3
version >= 0.20.0ডেটাফ্রেম মোছার উদাহরণ এবং নতুন কলামগুলি সারি হিসাবে যুক্ত করে। version < 0.20.0পান্ডাস সংস্করণে সূক্ষ্ম কাজের জন্য উদাহরণ0.24.1
লালো

@ এমুনসিং এই প্রশ্নের উত্তর অনুসন্ধান করার সময়, আমি শেষ পর্যন্ত আপনার উত্তরটিকে সহায়ক বলে মনে করি। প্রথমদিকে, তবে পান্ডার যেভাবে প্রয়োজন তা আমার পক্ষে কাজ করছে , axis=1না version = 0.25। আপডেট হওয়া সংস্করণটি অন্তর্ভুক্ত করার জন্য আমি আপনার উত্তরটি সংশোধন করার চেষ্টা করেছি, তবে আমাকে @ টেনলুকাস এবং @ আইল_রাফা দ্বারা প্রত্যাখ্যান করা হয়েছিল। আমি আশা করি যে আপনার প্রতিক্রিয়া কেন তাদের পক্ষে কাজ করছে না - এই বোঝার জন্য সংগ্রামরত সবাই - যেমন আমি ছিলাম - কমপক্ষে এই মন্তব্যটি আসে।
গ্রিফ

@ গ্রিফ - আমি এখন ভার্সন ভারসাম্য বিষয়গুলি সম্পর্কে আরও নির্ভুল এবং স্পষ্ট হতে আমার উত্তর আপডেট করেছি। এটি হাইলাইট করার জন্য ধন্যবাদ।
26'19

35

একটি এমনকি সহজ সমাধান হ'ল:

df = df.reindex(columns = header_list)                

যেখানে "শিরোলেখের তালিকা" হ'ল শিরোনামগুলির একটি তালিকা যা আপনি উপস্থিত হতে চান।

তালিকায় অন্তর্ভুক্ত থাকা কোনও শিরোনাম যা ইতিমধ্যে ডেটাফ্রেমে পাওয়া যায়নি নীচে ফাঁকা ঘর দিয়ে যুক্ত করা হবে।

তাই যদি

header_list = ['a','b','c', 'd']

তারপরে সি এবং ডি ফাঁকা ঘর সহ কলাম হিসাবে যুক্ত হবে


2
আরও স্পষ্টভাবে, কলামগুলি NaN এর সাথে যুক্ত করা হবে।
ব্রোকলি

19

থেকে শুরু করে v0.16.0, DF.assign()নতুন কলাম (দায়িত্ব অর্পণ করা ব্যবহার করা যেতে পারে একক / একাধিক একটি পর্যন্ত) DF। এই কলামগুলি শেষে বর্ণমালা অনুসারে .োকানো হবে DF

আপনি যে ফিরিয়ে দেওয়া ডেটাফ্রেমে সরাসরি জড়িত ক্রিয়াকলাপগুলি পরিচালনা করতে চান সেই ক্ষেত্রে সাধারণ কার্যভারের তুলনায় এটি সুবিধাজনক হয়ে ওঠে।

DF@ ডিএসএম দ্বারা প্রদর্শিত একই নমুনাটি বিবেচনা করুন :

df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]})
df
Out[18]:
   A  B
0  1  2
1  2  3
2  3  4

df.assign(C="",D=np.nan)
Out[21]:
   A  B C   D
0  1  2   NaN
1  2  3   NaN
2  3  4   NaN

নোট করুন যে এটি নতুন তৈরি হওয়াগুলি সহ পূর্ববর্তী সমস্ত কলামগুলির সাথে একটি অনুলিপি প্রদান করে। সেই DFঅনুসারে মূলটি সংশোধন করার জন্য এটি ব্যবহার করুন: df = df.assign(...)কারণ এটি inplaceবর্তমানে অপারেশন সমর্থন করে না ।


সি এর জন্য সেই ডেটাটাইপ কী? আমি স্ট্রিংয়ের একটি তালিকা দিয়ে লুপ করে যোগ করার চেষ্টা করছি। তবে এটি ব্যবহার করে না।
ইলিজোনমার্ক

12

আমি পছন্দ করি:

df['new'] = pd.Series(dtype='your_required_dtype')

আপনার যদি খালি ডেটাফ্রেম থাকে তবে এই সমাধানটি নিশ্চিত করে যে কেবলমাত্র NaNযুক্ত কোনও নতুন সারি যুক্ত করা হয়নি।

যদি dtypeনির্দিষ্ট না করা হয় তবে নতুন পান্ডাস সংস্করণ একটি তৈরি করে DeprecationWarning


5

আপনি যদি একটি তালিকা থেকে কলামের নাম যুক্ত করতে চান

df=pd.DataFrame()
a=['col1','col2','col3','col4']
for i in a:
    df[i]=np.nan

4

@ ইমুনসিংয়ের উত্তর একাধিক কলাম যুক্ত করার জন্য সত্যিই দুর্দান্ত তবে আমি পাইথন ২.7 এ এটি আমার পক্ষে কাজ করতে পারিনি। পরিবর্তে, আমি এই কাজগুলি পেয়েছি:

mydf = mydf.reindex(columns = np.append( mydf.columns.values, ['newcol1','newcol2'])

1

নীচের কোডটি "আমার বিদ্যমান ডেটাফ্রেমে আমি কীভাবে খালি কলামগুলি সংযুক্ত করব" প্রশ্নটি সম্বোধন করে। অনুরূপ সমস্যার সমাধান এক জায়গায় রাখার স্বার্থে, আমি এটি এখানে যুক্ত করছি।

1 টি দেখুন (1-64 থেকে কলামের নাম সহ 64 টি অতিরিক্ত কলাম তৈরি করতে)

m = list(range(1,65,1)) 
dd=pd.DataFrame(columns=m)
df.join(dd).replace(np.nan,'') #df is the dataframe that already exists

পদ্ধতির 2 (1-64 থেকে কলামের নাম সহ 64 টি অতিরিক্ত কলাম তৈরি করতে)

df.reindex(df.columns.tolist() + list(range(1,65,1)), axis=1).replace(np.nan,'')

1

আপনি করতে পারেন

df['column'] = None #This works. This will create a new column with None type
df.column = None #This will work only when the column is already present in the dataframe 

1

df.insert(index_to_insert_at, column_header, init_value)একটি নির্দিষ্ট সূচীতে নতুন কলাম সন্নিবেশ করতে ব্যবহার করতে পারেন ।

cost_tbl.insert(1, "col_name", "") 

উপরের বিবৃতিটি প্রথম কলামের পরে একটি খালি কলাম wouldোকাবে।

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