যার নামটিতে একটি নির্দিষ্ট স্ট্রিং রয়েছে তার কলাম সন্ধান করুন


137

কলামের নাম সহ আমার একটি ডেটাফ্রেম রয়েছে এবং আমি একটি নির্দিষ্ট স্ট্রিং রয়েছে এমন একটিটি খুঁজতে চাই, তবে এটির সাথে ঠিক মেলে না। আমি অনুসন্ধান করছি 'spike'কলাম নামে পছন্দ মধ্যে 'spike-2', 'hey spike', 'spiked-in'( 'spike'অংশ সবসময় ক্রমাগত যায়)।

আমি কলামের নামটি স্ট্রিং বা একটি ভেরিয়েবল হিসাবে ফিরে আসতে চাই, তাই আমি পরে df['name']বা df[name]স্বাভাবিক হিসাবে কলামটি অ্যাক্সেস করি । আমি এটি করার উপায়গুলি চেষ্টা করার চেষ্টা করেছি, কোনও লাভ হয়নি। কোন টিপস?

উত্তর:


229

কেবল পুনরাবৃত্তি করুন DataFrame.columns, এখন এটি একটি উদাহরণ যেখানে আপনি মেলে কলামের নামের সাথে শেষ করবেন:

import pandas as pd

data = {'spike-2': [1,2,3], 'hey spke': [4,5,6], 'spiked-in': [7,8,9], 'no': [10,11,12]}
df = pd.DataFrame(data)

spike_cols = [col for col in df.columns if 'spike' in col]
print(list(df.columns))
print(spike_cols)

আউটপুট:

['hey spke', 'no', 'spike-2', 'spiked-in']
['spike-2', 'spiked-in']

ব্যাখ্যা:

  1. df.columns কলামের নামের তালিকা দেয়
  2. [col for col in df.columns if 'spike' in col]df.columnsভেরিয়েবলের সাথে তালিকার উপরে পুনরাবৃত্তি হয় colএবং যদি colএতে থাকে তবে ফলাফলের তালিকায় এটি যুক্ত করে 'spike'। এই বাক্য গঠনটি তালিকা বোধগম্যতা

আপনি যদি কেবল কলামগুলির সাথে মেলে ফলাফলগুলি ডেটা সেট করতে চান তবে আপনি এটি করতে পারেন:

df2 = df.filter(regex='spike')
print(df2)

আউটপুট:

   spike-2  spiked-in
0        1          7
1        2          8
2        3          9

1
সেটা খুবই ভালো! পাইথন এবং পান্ডাস উভয়ের ক্ষেত্রেই এটি ঠিক কীভাবে কাজ করে তা আমি সত্যিই বুঝতে পারি না। আপনি সম্ভবত ব্যাখ্যা করতে পারেন?
এরিকফাস

16
DataFrame.filterএফআইআইআই এটিই করে (এবং আপনি চাইলে আপনি একটি রেজেক্স সরবরাহ করতে পারেন)
জেফ

2
@xndrme আপনি কীভাবে কোনও রেগেক্সের সাথে মিল রেখে পরিবর্তিত কোনও রেজেক্সের সাথে মিল রেখে কোনও কলাম বাদ দিতে একটি রিজেক্স করবেন ?
ধ্রুব গুলতি

3
@ ধ্রুভগুলাটি আপনার অনাকাঙ্ক্ষিত কলামগুলিকে এখানে যেমন রেখে দিতে পারে df[df.columns.drop(spike_cols)], সেখানে DataFrameতালিকার কলামগুলি ছাড়াও আপনি একটি অনাকাঙ্ক্ষিত রেইগেক্স spike_colsব্যবহার করে পেতে পারেন।
আলভারো ফুয়েন্তেস

1
আরও সংক্ষিপ্ত কোড:df[[col for col in df.columns if "spike" in col]]
উইন্ডচাইমস

71

এই উত্তরটি ডেটাফ্রেম.ফিল্টার পদ্ধতিটি তালিকা বোধগম্যতা ছাড়াই এটি করতে ব্যবহার করে:

import pandas as pd

data = {'spike-2': [1,2,3], 'hey spke': [4,5,6]}
df = pd.DataFrame(data)

print(df.filter(like='spike').columns)

কেবল 'স্পাইক -২' আউটপুট দেবে। উপরের মন্তব্যে কিছু লোকের পরামর্শ অনুসারে আপনি রেজেক্সও ব্যবহার করতে পারেন:

print(df.filter(regex='spike|spke').columns)

উভয় কলাম আউটপুট দেবে: ['স্পাইক -২', 'ওহে স্পেক']


22

আপনি ব্যবহার করতে পারেন df.columns[df.columns.str.contains(pat = 'spike')]

data = {'spike-2': [1,2,3], 'hey spke': [4,5,6], 'spiked-in': [7,8,9], 'no': [10,11,12]}
df = pd.DataFrame(data)

colNames = df.columns[df.columns.str.contains(pat = 'spike')] 

print(colNames)

এটি কলামের নামগুলি আউটপুট দেবে: 'spike-2', 'spiked-in'

আরো pandas.Series.str.contains





0

শুরু, অন্তর্ভুক্ত এবং সমাপ্তির উপর ভিত্তি করে নাম অর্জন এবং সাবসেটিং:

# from: /programming/21285380/find-column-whose-name-contains-a-specific-string
# from: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.str.contains.html
# from: https://cmdlinetips.com/2019/04/how-to-select-columns-using-prefix-suffix-of-column-names-in-pandas/
# from: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.filter.html




import pandas as pd



data = {'spike_starts': [1,2,3], 'ends_spike_starts': [4,5,6], 'ends_spike': [7,8,9], 'not': [10,11,12]}
df = pd.DataFrame(data)



print("\n")
print("----------------------------------------")
colNames_contains = df.columns[df.columns.str.contains(pat = 'spike')].tolist() 
print("Contains")
print(colNames_contains)



print("\n")
print("----------------------------------------")
colNames_starts = df.columns[df.columns.str.contains(pat = '^spike')].tolist() 
print("Starts")
print(colNames_starts)



print("\n")
print("----------------------------------------")
colNames_ends = df.columns[df.columns.str.contains(pat = 'spike$')].tolist() 
print("Ends")
print(colNames_ends)



print("\n")
print("----------------------------------------")
df_subset_start = df.filter(regex='^spike',axis=1)
print("Starts")
print(df_subset_start)



print("\n")
print("----------------------------------------")
df_subset_contains = df.filter(regex='spike',axis=1)
print("Contains")
print(df_subset_contains)



print("\n")
print("----------------------------------------")
df_subset_ends = df.filter(regex='spike$',axis=1)
print("Ends")
print(df_subset_ends)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.