首页 > 解决方案 > Pandas.DataFrame.join 在我的情况下不起作用

问题描述

嘿专家!

我正在尝试从列表中加载多个文件ratios并将它们加入熊猫一个数据框中。

for loop,代码在加载csv文件时工作正常,但连接功能不起作用,我(BCH-USD)每次都得到第一个数据。

我检查了所有内容,看起来很好,后来,我写了相同的代码,for loop并且该代码工作得非常好,并按预期加入了数据框。(我在下面添加了这段代码)

import numpy as np 
import pandas as pd 
import os 

data = pd.DataFrame()

ratios = ['BCH-USD','BTC-USD','ETH-USD','LTC-USD']
for ratio in ratios:
    cols = ['time','low','high','open','close','volume']
    path =  str(os.path.dirname (__file__) + f"/data/{ratio}.csv")
    df = pd.read_csv(path,names=cols)
    df.drop(['low','high','open'],axis=1,inplace=True)
    df.rename(columns={'close': f'{ratio}_close', 'volume': f'{ratio}_volume'},inplace=True)
    df.set_index('time',inplace=True)

    # print(df.head(1))

    if len(data) == 0:
        data = df
    elif (len(data) != 0):
        print(df.columns)
        data.join(df)

print(data)

输出

Index(['BTC-USD_close', 'BTC-USD_volume'], dtype='object')
Index(['ETH-USD_close', 'ETH-USD_volume'], dtype='object')
Index(['LTC-USD_close', 'LTC-USD_volume'], dtype='object')
            BCH-USD_close  BCH-USD_volume
time
1528968660     871.719971        5.675361
1528968720     870.859985       26.856577
1528968780     870.099976        1.124300
1528968840     870.789978        1.749862
1528968900     870.000000        1.680500
...                   ...             ...
1535215020     531.479980        0.016868
...                   ...             ...
1535215020     531.479980        0.016868
1535215080     531.469971        0.013854
1535215140     531.479980        0.016900
1535215080     531.469971        0.013854
1535215140     531.479980        0.016900
1535215200     531.479980        0.299520
1535215260     531.630005        3.528913

[92225 rows x 2 columns]

我做错了什么?

这是我后来尝试并按预期工作但没有任何循环的代码。

df1 = pd.read_csv("./data/BCH-USD.csv", names=cols)

df1.rename(columns = {'close': 'bch_close', 'volume':'bch_volume'},inplace=True)

df1.set_index('time',inplace=True)

print(len(df1))
print(df1.head())




df2 = pd.read_csv("./data/btc-USD.csv", names=cols)

df2.rename(columns = {'close': 'btc_close', 'volume':'btc_volume'},inplace=True)

df2.set_index('time',inplace=True)

print(len(df1))
print(df1.head())

df1.join(df2[['btc_close','btc_volume']])

输出

输出

标签: pythonpandasdataframe

解决方案


推荐阅读