Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python将csv文件转换为数据帧_Python_Pandas_Csv_Dataframe - Fatal编程技术网

Python将csv文件转换为数据帧

Python将csv文件转换为数据帧,python,pandas,csv,dataframe,Python,Pandas,Csv,Dataframe,我有一个包含以下数据的大型csv文件: 2018-09, 100, A, 2018-10, 50, M, 2018-11, 69, H,.... 等等。(无单独行的连续流) 我想把它转换成dataframe,看起来像 Col1 Col2 Col3 2018-09 100 A 2018-10 50 M 2018-11 69 H 这是实际数据的简化版本。请告知最好的方法是什么 编辑:为了澄清,我的csv文件没有为每一行单独设置行。所有数据都在一行上。一种解决方案是

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

2018-09, 100, A, 2018-10, 50, M, 2018-11, 69, H,....
等等。(无单独行的连续流)

我想把它转换成dataframe,看起来像

Col1     Col2  Col3
2018-09  100   A
2018-10  50    M
2018-11  69    H
这是实际数据的简化版本。请告知最好的方法是什么


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

一种解决方案是通过
csv
模块将单行分割成块,然后馈送到
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

一种解决方案是通过
csv
模块将单行分割成块,然后馈送到
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
返回

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

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

pandas.read_csv
df=pd.read_csv('pandas_dataframe_importing_csv/example.csv',Name=['UID',First Name',Last Name',Age',Pre-Test Score',Post-Test Score'])
csv文件中的新行格式似乎不清楚。是这样吗?是的。我的csv文件每行没有单独的行。
pandas.read\u csv
df=pd.read\u csv('pandas\u dataframe\u importing\u csv/example.csv',names=['UID','First Name','Last Name',Age','Pre Test Score',Post Test Score'])
在csv文件中似乎新行格式不清楚。是这样吗?是的。我的csv文件每行没有单独的行。你能解释一下吗?
重塑
-1
有什么关系?
sep=',\s*'
做什么?是否保留数字类型?事实上,我比我更喜欢这个解决方案,所以+1。你能解释一下吗?
重塑
-1
有什么关系?
sep=',\s*'
做什么?是否保留数字类型?实际上,我更喜欢这个解决方案,而不是我的so+1。