简体   繁体   中英

Can i split a Dataframe by columns?

I need to split a Dataframe by the columns, I made a simple code, that runs without error, but didn't give me the return i expected. Here's the simple code:

dados = pd.read_excel(r'XXX')

for x in range(1,13):
    selectmonth = x
    while selectmonth < 13:
        df_datas = dados.loc[dados['month'] == selectmonth]
        correlacao2 = df_datas.corr().round(4).iloc[0]
    else: break
print()

I did one by one by inputing the selected mouth manually like this:

dfdatas = dados.loc[dados['month'] == selectmonth]
    print('\n Voce selecionou o mês: ', selectmonth)
colunas2 = list(dfdatas.columns.values)
correlacao2 = dfdatas.corr().round(4).iloc[0]
print(correlacao2)

is there some way to do this in a loop? from month 1 to 12?

With pandas, you should avoid using loops wherever possible, it is very slow. You can achieve what you want here with index slicing. I'm assuming your columns are just the month numbers, you can do this:

setting up an example df:

df = pd.DataFrame([], columns=range(15))


df:
Columns: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
Index: []

getting columns with numbers 1 to 12:

dfdatas = df.loc[:, 1:12]

Columns: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
Index: []

In the future, you should include example data in your question.

Just try this:

correlacao2 = dados.corr(method='pearson').round(4)
for month in dados.columns:
    print('\n Voce selecionou o mês: ', month)
    result=correlacao2.loc[month]
    result=pd.DataFrame(result)
    print(result)

Here I have used corr() and for-loop method and converted them to DataFrame

dados is your dataframe name

If your column name is number, then rename it with month name using dados.rename(columns={'1': 'Jan','2':'Feb','3':'Mar'}) . Similarly, you include other months too to rename the column names. After renaming, apply the above code to get your expected answer.

If you don't want want to rename, then use .iloc[] instead of .loc[] in above code

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM