为啥我的 pandas 数据框只显示一个数据集的结果?
Posted
技术标签:
【中文标题】为啥我的 pandas 数据框只显示一个数据集的结果?【英文标题】:Why is my pandas dataframe only showing results for one dataset?为什么我的 pandas 数据框只显示一个数据集的结果? 【发布时间】:2021-05-11 06:38:25 【问题描述】:我有两个 CSV 格式的数据集,我想在一个 pandas 数据框中循环并显示结果。现在我在 df 中的结果只显示 B 数据集,但如果我尝试打印“数据”,它会显示我在下面的两个 CSV 数据集。
测试 CSV 数据集是:
Date | fastMA | slowMA | Ticker |
---|---|---|---|
01/01/2021 | 1 | 5 | A |
02/01/2021 | 2 | 5 | A |
03/01/2021 | 4 | 5 | A |
04/01/2021 | 5 | 5 | A |
05/01/2021 | 6 | 5 | A |
06/01/2021 | 7 | 5 | A |
07/01/2021 | 4.5 | 5 | A |
08/01/2021 | 4 | 5 | A |
09/01/2021 | 3 | 5 | A |
Date | fastMA | slowMA | Ticker |
---|---|---|---|
01/01/2021 | 1 | 5 | B |
02/01/2021 | 2 | 5 | B |
03/01/2021 | 4 | 5 | B |
04/01/2021 | 5 | 5 | B |
05/01/2021 | 6 | 5 | B |
06/01/2021 | 7 | 5 | B |
07/01/2021 | 4.5 | 5 | B |
08/01/2021 | 4 | 5 | B |
09/01/2021 | 3 | 5 | B |
ticker = csv.reader(open('gdrive/My Drive/data/test/test_tickers/test_tickers.csv'))
for symbols in ticker:
tickers = symbols
data = pd.read_csv('gdrive/My Drive/data/test/test_data/.csv'.format(symbols))
i = 1
j = len(data)
in_trade = 0
dates = []
symbol = []
while i < j:
long = data["fastMA"][i] > data["slowMA"][i]
close = data["fastMA"][i] < data["slowMA"][i]
if long and in_trade == 0:
in_trade = 1
symbol.append(data["Ticker"][i])
dates.append(data["Date"][i])
i += 1
elif long and in_trade == 1:
in_trade = 1
i += 1
elif close and in_trade == 1:
in_trade = 0
i += 1
else:
i += 1
d = 'Date':dates,'Ticker':symbol
d
df = pd.DataFrame(d, columns=('Date','Ticker'))
df
我需要添加其他东西吗?
编辑:
我现在在 df 中得到的输出:
Date | Ticker |
---|---|
05/01/2021 | B |
我想要的 df 输出:
Date | Ticker |
---|---|
05/01/2021 | A |
05/01/2021 | B |
【问题讨论】:
请显示您想要的输出 添加了所需的输出。谢谢。 我认为我的日期和符号列表正在每个循环之间清除,因此它从数据集 A 中获取结果,然后清除这些结果并重新开始数据集 B。这就是为什么只显示数据集 B 结果的原因.我需要保留之前的结果。 在您的方法中更加系统化。 1. 加载/准备数据。 2. 处理/计算数据。 3. 重塑所需的输出。你把这三个混在一起犯了错误 【参考方案1】:对于读入的每个 ticker
行,您正在消隐 dates
和 symbol
,它们需要在您的循环之外。如果你稍微重组一下,你应该得到你想要的输出:
import csv
import pandas as pd
with open('test_tickers.csv', newline='') as f_tickers:
csv_tickers = csv.reader(f_tickers)
dates = []
symbols = []
for symbol in csv_tickers:
data = pd.read_csv(f'symbol[0].csv')
i = 1
j = len(data)
in_trade = 0
while i < j:
long = data["fastMA"][i] > data["slowMA"][i]
close = data["fastMA"][i] < data["slowMA"][i]
if long and in_trade == 0:
in_trade = 1
symbols.append(data["Ticker"][i])
dates.append(data["Date"][i])
elif long and in_trade == 1:
in_trade = 1
elif close and in_trade == 1:
in_trade = 0
i += 1
d = 'Date' : dates, 'Ticker' : symbols
df = pd.DataFrame(d, columns=('Date','Ticker'))
print(df)
给予:
Date Ticker
0 05/01/2021 A
1 05/01/2021 B
(假设test_tickers.csv
包含两行包含A
和B
并且A.csv
和B.csv
包含您问题中的数据)
【讨论】:
以上是关于为啥我的 pandas 数据框只显示一个数据集的结果?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的代码没有从 Pandas 数据框中选择数据? [复制]
如何在一个单元格中同时显示随机数据和数据集的描述性统计数据? (Jupyter 笔记本,熊猫)