Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
91 views
in Technique[技术] by (71.8m points)

python - Trying to set up Pandas Crosstabs and Running into issues with loops

I am new to python and cannot work out why this loop will not run-

I can run this-

df1 = pd.crosstab(df['Gender: What gender do you identify with?'], df[Banner[0]], normalize= 'columns')
df2 = pd.crosstab(df['Gender: What gender do you identify with?'], df[Banner[1]], normalize= 'columns')
df3 = pd.crosstab(df['Gender: What gender do you identify with?'], df[Banner[2]], normalize= 'columns')
df4 = pd.crosstab(df['Gender: What gender do you identify with?'], df[Banner[3]], normalize= 'columns')
df5 = pd.crosstab(df['Gender: What gender do you identify with?'], df[Banner[4]], normalize= 'columns')
df6 = pd.crosstab(df['Gender: What gender do you identify with?'], df[Banner[5]], normalize= 'columns')
df7 = pd.crosstab(df['Gender: What gender do you identify with?'], df[Banner[6]], normalize= 'columns')
df8 = pd.crosstab(df['Gender: What gender do you identify with?'], df[Banner[7]], normalize= 'columns')
df9 = pd.crosstab(df['Gender: What gender do you identify with?'], df[Banner[8]], normalize= 'columns')
df10 = pd.crosstab(df['Gender: What gender do you identify with?'], df[Banner[9]], normalize= 'columns')
df11 = pd.crosstab(df['Gender: What gender do you identify with?'], df[Banner[10]], normalize= 'columns')
df12 = pd.crosstab(df['Gender: What gender do you identify with?'], df[Banner[11]], normalize= 'columns')
df13 = pd.crosstab(df['Gender: What gender do you identify with?'], df[Banner[12]], normalize= 'columns')

But when I try to run this as a loop I run into errors-

I have tried-

i = 0
while i < 10:
    df[i] = (pd.crosstab(df['Gender: What gender do you identify with?'], df[Banner[[i]]], normalize= 
'columns'))
    i = i+1

and receive error-


TypeError                                 Traceback (most recent call last)
<ipython-input-32-682256052209> in <module>
  1 i = 0
  2 while i < 10:
----> 3     df[i] = (pd.crosstab(df['Gender: What gender do you identify 
with?'], df[Banner[[i]]], normalize= 'columns'))
       4     i = i+1

TypeError: list indices must be integers or slices, not list

I have also tried-

for i in range(0, len(Banner)):
    df[i] = (pd.crosstab(df['Gender: What gender do you identify with?'], df[Banner[[i]]], normalize= 
'columns'))
    i = i+1

And receive same error-

TypeError: list indices must be integers or slices, not list

Just curious why I run into this error when using loops but not creating manually.

question from:https://stackoverflow.com/questions/65919918/trying-to-set-up-pandas-crosstabs-and-running-into-issues-with-loops

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

This is the problem

df[Banner[[i]]]

You have an extra "[ ]" around i making it a list hence the error:

TypeError: list indices must be integers or slices, not list

Use this instead:

df[Banner[i]]

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...