क्या किसी को पता है कि लूप के लिए स्ट्रिंग्स की सूची को कैसे जोड़ना है?

यह लूप के बिना काम करता है:

कॉलम नाम निकालें

column_names = file.columns.tolist()
column_names[1]= column_names[1] + '_Vol_Adj'
column_names[1]

लेकिन निम्नलिखित लूप के भाग के रूप में काम नहीं करता है:

for i in column_names[1:-2]:
    column_names[i]= column_names[i] + '_Vol_Adj'
    i = i+1
TypeError                                 Traceback (most recent call last)
<ipython-input-242-5509cede9f32> in <module>()
      2 
      3 for i in column_names[1:-2]:
----> 4     column_names[i]= column_names[i] + '_Vol_Adj'
      5     i = i+1

TypeError: list indices must be integers or slices, not str
2
arkadiy 24 जुलाई 2018, 00:52
5
for i in column_names[1:-2] सूची में सूचकांकों पर पुनरावृति नहीं करता है। अपने लूप के अंदर print(i) आज़माएं और आपको समस्या दिखाई देगी। संबंधित: 'for' लूप में इंडेक्स एक्सेस करना?
 – 
pault
24 जुलाई 2018, 00:53

3 जवाब

आपकी समस्या यह है कि जब आप for i in column_names[1:-2] का उपयोग करके सूची column_names पर पुनरावृति करते हैं, तो i का मान सूची का तत्व होगा (संबंधित अनुक्रमणिका नहीं)।

आपके मामले में, एक साधारण बात enumerate का उपयोग करना होगा, जैसा कि निम्नलिखित उदाहरण में दिखाया गया है:

column_names = ["a", "b", "c", "d", "e"]
for i, val in enumerate(column_names[1:-2]):
    column_names[i+1] += '_Vol_Adj'
print(column_names)
#['a', 'b_Vol_Adj', 'c_Vol_Adj', 'd', 'e']

मैं लूप के अंदर इंडेक्स i+1 पर मान अपडेट कर रहा हूं क्योंकि हम इंडेक्स 1 पर पुनरावृत्ति शुरू कर रहे हैं।

या आप range(1, len(column_names)-2) को @Barmar सुझाया गया:

for i in range(1, len(column_names)-2):
    column_names[i+1] += '_Vol_Adj'
2
pault 24 जुलाई 2018, 01:05
1
दूसरा विकल्प range(1, len(column_names)-2) है तो आपको i+1 का उपयोग करने की आवश्यकता नहीं है
 – 
Barmar
24 जुलाई 2018, 01:03

add_suffix और df.rename का भी उपयोग कर सकते हैं

cols=['b', 'c']
ncols = df[cols].add_suffix('_suffix').columns

df.rename(columns={old:new for old,new in zip(cols,ncols)})
2
rafaelc 24 जुलाई 2018, 02:33

आप अपने for लूप को enumerate या range.

यह देखते हुए कि आप पंडों का उपयोग कर रहे हैं, आपको NumPy- आधारित समाधान में रुचि हो सकती है:

import pandas as pd, numpy as np

df = pd.DataFrame(columns=list('ABCDE'))

arr = df.columns.values
arr[1:-1] += '_Vol_Adj'
df.columns = arr

print(df.columns)

Index(['A', 'B_Vol_Adj', 'C_Vol_Adj', 'D_Vol_Adj', 'E'], dtype='object')

यह महत्वपूर्ण है कि आप सीधे df.columns.values को संशोधित न करें, क्योंकि इसके दुष्प्रभाव हैं। यहां हमने अंतर्निहित NumPy सरणी की एक प्रति को संशोधित किया है और फिर डेटाफ़्रेम को वापस असाइन किया है।

1
jpp 24 जुलाई 2018, 01:22