【问题标题】:Python transpose, column name are inside the dataframe recordsPython转置,列名在数据框记录内
【发布时间】:2017-04-18 18:40:38
【问题描述】:

我很确定我在这里遗漏了一些非常基本的东西,但我并没有真正在 pandas 文档中找到我想要的东西。

我下载了一个 ForEx 数据框,并想保存它,但在此之前,我必须将其格式化为 8 列/X 行、矩阵/数据框/向量(根据需要多少行) .我把它作为一行,每条记录旁边都有他的列名。 (我可以将其保存为 .CSV)

我在这里的能力是 .transpose,单靠它是行不通的。

我已经成功了一次,但我似乎忘记了保存代码,而且已经有一段时间了....但多亏了这个,我可以向您展示我读入 python 的旧 csv,并展示如何我想格式化它。

(列名:索引(不是真正的列,只是索引),close,date,high,low,open,close,qouteVolume,volume,weightedAvarage)

    source_df = get_ForEx_data(**params)
list(source_df )
list(TransposedData)
TransposedData = source_df .transpose()

编辑:(从互联网获取数据的功能)

def get_poloinex_data(s, a, b, c):

import requests
from pandas import DataFrame
from io import StringIO

url = 'https://poloniex.com/public?command=returnChartData'

url += '&currencyPair=' + s #USDT a dollár
url += '&start=' + a
url += '&end=' + b
url += '&period=' + c

csv = requests.get(url)

if csv.ok:
    return DataFrame.from_csv(StringIO(csv.text), sep=',') #Separátor itt!
else:
    return None

我用这个得到的数据在python中是这样的:

Columns: [high:1.85, low:0.50000021, open:1.65, close:1.85, volume:144.42819254, quoteVolume:84.01638508, weightedAverage:1.71904792}, {"date":1439020800, high:1.7, low:1.40000001, open:1.7, close:1.40000001, volume:129.57577588, quoteVolume:92.52305316, weightedAverage:1.40047016}, {"date":1439035200, high:1.40000001, low:1.40000001.1, open:1.40000001, close:1.40000001.1, volume:0, quoteVolume:0, weightedAverage:1.40000001}, {"date":1439049600, high:1.40000001.1, low:1.40000001.2, open:1.40000001.1, close:1.40000001.2, volume:0.1, quoteVolume:0.1, weightedAverage:1.40000001}.1, {"date":....

我要找的是这样的:

              close                 date       high        low       open  \
0      1.850000  2015-08-08 04:00:00   1.850000   0.500000   1.650000   
1      1.400000  2015-08-08 08:00:00   1.700000   1.400000   1.700000   
2      1.400000  2015-08-08 12:00:00   1.400000   1.400000   1.400000   
3      1.400000  2015-08-08 16:00:00   1.400000   1.400000   1.400000

其余列依此类推

【问题讨论】:

  • 什么是get_ForEx_data()?这是您创建的运行某种类型的 API 来下载数据的方法吗?请在任何 pandas 工作之前显示实际的源数据(不是屏幕截图,而是发布的文本)。
  • 是的,对不起,我输错了 ForEx,我用它来从 polinex 获取加密货币数据(我有两个,它们是相同的,只是 URL 不同)稍后会编辑(编辑:我无法将代码发布到 cmets?edit2:哦,它太长了,抱歉,如果有人感兴趣,请按 Ctrl+K)
  • 能看到返回请求的数据吗?只需转储几行,然后在工具栏中编码格式{}
  • 对不起,我尝试在评论中添加要求的信息,但最后我决定将其添加到主要问题中(字符限制存在问题)
  • 您的 API 请求是 json 格式,pandas 有很棒的 json 工具。但是,此 json 无效,因为字符串标识符必须用引号括起来,并且只有 date 是。另外,外部 Columns 必须包含在容器中。要么您在此处的帖子中删除了它,要么它的来源无效。

标签: python csv pandas transpose


【解决方案1】:

正如 Parfait 已经说过的,您的数据是 JSON 格式,而不是 CSV。因此使用 pandas 的 read_json 函数而不是 from_csv

导入整个 pandas 模块:

import pandas as pd

将 JSON 数据转换为 DataFrame:

if csv.ok:
    return pd.read_json(StringIO(csv.text))
else:
    return None

这将返回您所需格式的 DataFrame:

        close                date      high       low      open  quoteVolume
0    0.000073 2015-08-08 08:00:00  0.000073  0.000073  0.000073     0.000000   
1    0.000073 2015-08-08 08:05:00  0.000073  0.000073  0.000073     0.000000   
2    0.000073 2015-08-08 08:10:00  0.000073  0.000073  0.000073     0.000000   

【讨论】:

  • 谢谢,对于响应时间缓慢,我深表歉意,但我在工作时无法处理此问题。它可以工作,并以我需要的方式保存数据,我花了几分钟试图给它不同的参数,但结果是基本的处理它恰到好处
猜你喜欢
  • 2020-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-11
  • 1970-01-01
  • 2021-07-14
相关资源
最近更新 更多