【问题标题】:Python converting csv files to dataframesPython将csv文件转换为数据框
【发布时间】:2019-04-13 03:35:35
【问题描述】:

我有一个包含如下数据的大型 csv 文件:

2018-09, 100, A, 2018-10, 50, M, 2018-11, 69, H,....

等等。 (连续流,没有单独的行)

我想把它转换成数据框,看起来像

Col1     Col2  Col3
2018-09  100   A
2018-10  50    M
2018-11  69    H

这是实际数据的简化版本。请建议什么是处理它的最佳方法。

编辑:为了澄清,我的 csv 文件的每一行没有单独的行。所有数据都在一行上。

【问题讨论】:

  • pandas.read_csv
  • df = pd.read_csv('pandas_dataframe_importing_csv/example.csv', names=['UID', 'First Name', 'Last Name', 'Age', 'Pre-Test Score', 'Post-Test Score'])
  • csv 文件中的新行格式似乎不清楚。是这样吗?
  • 是的。我的 csv 文件没有单独的行,每一行。

标签: python pandas csv dataframe


【解决方案1】:

一种解决方案是通过csv 模块和this algorithm 将单行拆分为块,然后提供给pd.DataFrame 构造函数。请注意,您的数据框将是 dtype object,因此您必须在之后显式转换数字系列类型。

from io import StringIO
import pandas as pd
import csv

x = StringIO("""2018-09, 100, A, 2018-10, 50, M, 2018-11, 69, H""")

# define chunking algorithm
def chunks(L, n):
    """Yield successive n-sized chunks from l."""
    for i in range(0, len(L), n):
        yield L[i:i + n]

# replace x with open('file.csv', 'r')
with x as fin:
    reader = csv.reader(fin, skipinitialspace=True)
    data = list(chunks(next(iter(reader)), 3))

# read dataframe
df = pd.DataFrame(data)

print(df)

         0    1  2
0  2018-09  100  A
1  2018-10   50  M
2  2018-11   69  H

【讨论】:

    【解决方案2】:
    data = pd.read_csv('tmp.txt', sep=',\s *', header=None).values
    pd.DataFrame(data.reshape(-1, 3), columns=['Col1', 'Col2', 'Col3'])
    

    返回

          Col1 Col2 Col3
    0  2018-09  100    A
    1  2018-10   50    M
    2  2018-11   69    H
    

    【讨论】:

    • 你能稍微解释一下吗? reshape-1 有什么作用? sep=',\s *' 是做什么的?是否保留了数字类型?我实际上比我更喜欢这个解决方案,所以 +1。
    猜你喜欢
    • 2016-02-18
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    • 2016-02-16
    • 1970-01-01
    • 2013-09-09
    相关资源
    最近更新 更多