【问题标题】:Making columns from a range of lines in pandas从 Pandas 中的一系列行中创建列
【发布时间】:2020-04-22 01:30:43
【问题描述】:

我有一个 csv 文件,如下所示:

A, B
1,2
3,4
5,6

C,D
7,8
9,10
11,12

E,F
13,14
15,16

正如您所见和想象的,当我使用 pd.read_csv 导入这些数据时,pandas 会创建包含两列 (A,B) 和一堆行的整个内容。这是正确的,因为形状。但是,我想创建各种列(A、B、C、D ...)。幸运的是,每个“列”的末尾都有一个空格,我认为这可以用来以某种方式分隔这些行。但是,我不知道如何处理。

数据:

https://raw.githubusercontent.com/AlessandroMDO/Dinamica_de_Voo/master/data.csv

【问题讨论】:

  • 你能打开 csv 并从你的 ide 粘贴几行吗?你必须有一个自定义的行终止符或其他东西
  • 行数总是一样的吗?另外,请让您的输入内容易于复制,例如 2d 列表。
  • 您能否在文本框中提供以上内容,只需进行简单的复制和粘贴
  • 我试图粘贴到这里,但不起作用,所以我放了一个链接。
  • 是的,每个“列”都有相同的行数。

标签: python pandas


【解决方案1】:

这是pandas.read_csv的正常行为,但通常数据不会以这种方式存储在csv文件中。

您可以尝试读取 csv,去掉多余的空格,然后先用空行将其拆分为多个部分。然后使用pandas.read_csvStringIO 读取每个部分,并使用pandas.concat 将它们连接在一起。

import pandas as pd
from io import StringIO

with open('test.csv', 'r') as f:
    parts = f.read().strip().split('\n\n')

df = pd.concat([pd.read_csv(StringIO(part)) for part in parts], axis=1)

我已经用你的 csv 试过这个:

    Alpha       Cd  Alpha       CL  Alpha  ...   Cnp  Alpha   Cnr  Alpha   Clr
0   -14.0  0.08941  -14.0 -0.19430  -14.0  ...   0.0  -14.0   0.0  -14.0   0.0
1   -12.0  0.07646  -12.0 -0.17150  -12.0  ...   0.0  -12.0   0.0  -12.0   0.0
2   -10.0  0.06509  -10.0 -0.14710  -10.0  ...   0.0  -10.0   0.0  -10.0   0.0
3    -8.0  0.05545   -8.0 -0.12150   -8.0  ...   0.0   -8.0   0.0   -8.0   0.0
4    -6.0  0.04766   -6.0 -0.09479   -6.0  ...   0.0   -6.0   0.0   -6.0   0.0
5    -4.0  0.04181   -4.0 -0.06722   -4.0  ...   0.0   -4.0   0.0   -4.0   0.0
6    -2.0  0.03797   -2.0 -0.03905   -2.0  ...   0.0   -2.0   0.0   -2.0   0.0
7     0.0  0.03620    0.0 -0.01054    0.0  ...   0.0    0.0   0.0    0.0   0.0
8     2.0  0.03651    2.0  0.01806    2.0  ...   0.0    2.0   0.0    2.0   0.0
9     4.0  0.03960    4.0  0.05879    4.0  ...   0.0    4.0   0.0    4.0   0.0
10    6.0  0.04814    6.0  0.12650    6.0  ...   0.0    6.0   0.0    6.0   0.0
11    8.0  0.06494    8.0  0.22050    8.0  ...   0.0    8.0   0.0    8.0   0.0
12   10.0  0.09268   10.0  0.33960   10.0  ...   0.0   10.0   0.0   10.0   0.0
13   12.0  0.13390   12.0  0.48240   12.0  ...   0.0   12.0   0.0   12.0   0.0
14   14.0  0.19110   14.0  0.64710   14.0  ...   0.0   14.0   0.0   14.0   0.0
[15 rows x 36 columns]

【讨论】:

  • 忘了说,如果您不需要重复的 Alpha 列,请在 read_csv 中指定 index_col='Alpha'
猜你喜欢
  • 2021-02-21
  • 1970-01-01
  • 2013-09-06
  • 2015-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-20
相关资源
最近更新 更多