python - 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']])
输出
解决方案
推荐阅读
- laravel - mkdir():在 IIS8 上的 laravel 上导出 Excel 文件时文件存在
- python-3.x - 如何在 Python 中定义函数?
- c# - 使用直接获取的令牌问题访问 MS Graph API
- mysql - 如何使用 nodeJS 和 Ajax(无 php)将用户输入数据发送到 MySQL 数据库
- powershell - 从 poweshell 执行时,WSL 无法识别像“uname -s”这样的命令
- reactjs - 在 kepler.gl 中请求渲染新帧
- r - SHINY:与 sliderInput、dateRangeInput 和 selectInput 的“链式”反应性
- angularjs - Ionic 1 - 如果用户未登录则显示登录页面,如果用户已登录则跳过
- reactjs - 将现有 CMS 网站中的 google analytics、标签管理器转换为 gatsby
- google-app-engine - 如何在 Google App Engine 上部署 Vue.js 应用程序?