मेरे पास नीचे की तरह df नामक एक नमूना डेटा फ्रेम है (वास्तविक डीएफ में हजारों पंक्तियां हैं) जहां कॉलम "कोड" का प्रत्येक तत्व एक सूची है (और इनमें से प्रत्येक सूची में एकाधिक तत्व हो सकते हैं):

enter image description here

मैं प्रत्येक पंक्ति के लिए उद्धरण चिह्नों के बीच पहला कोड नंबर प्राप्त करना चाहता हूं। इसलिए, मैं उपरोक्त डेटा फ्रेम के लिए आउटपुट चाहता हूं:

enter image description here

प्रारंभ में, मैंने सोचा था कि सभी कोड 4-अंकीय संख्याएं हैं, इसलिए मैंने यह कोशिश की:

My_List = df['Code'].tolist()

Unique_Code =[]
for i in range(0, len(My_List)):
    k = My_List[i][2:5]
    Unique_Code.append(k)

df['Unique_Code'] = Unique_Code 

लेकिन यह स्पष्ट रूप से केवल तभी काम करता है जब कोड 4-अंकीय संख्या हो।

क्या आप कृपया इस समस्या को हल करने के लिए एक अधिक कुशल और सार्वभौमिक तरीका खोजने में मेरी मदद कर सकते हैं? बहुत धन्यवाद

1
RGRGRG 24 जिंदा 2021, 23:33

2 जवाब

सबसे बढ़िया उत्तर

यदि आपके डेटाफ़्रेम के कोड मान बिल्कुल अजगर सूचियों की तरह हैं, तो आप उन्हें फिर से ऑब्जेक्ट में बदलने के लिए eval() फ़ंक्शन का उपयोग कर सकते हैं; न केवल संख्याओं के लिए काम करता है, आप इसे स्ट्रिंग्स, फ़ंक्शंस आदि पर उपयोग कर सकते हैं।

इसे आजमाएं:

data = {
    'ID': ["1", "2", "3", "4"],
    'Code': ['["435"]', '["442244"]', '["etetetet"]', '["345666"]'],
}

data_frame = pd.DataFrame(data, columns=["ID", "Code"])
for index, each_row in data_frame.iterrows():
    id_column = each_row["ID"]
    code_row = eval(each_row["Code"])[0]
    print(code_row)

बस एक पंक्ति में:

codes = [eval(each_code) for each_code in df['Code'].tolist()]
1
DRPK 24 जिंदा 2021, 23:54
g=df.explode('code').groupby('id')['code'].first().to_frame()#explode and pick first item in each group
g['code']=g['code'].str.strip("''")#Proceed and strip the inverted comas from code
1
wwnde 24 जिंदा 2021, 23:48