Python 3.x pandas read_csv,数据和标题位于交替列中
我有一个生成的CSV文件Python 3.x pandas read_csv,数据和标题位于交替列中,python-3.x,pandas,csv,Python 3.x,Pandas,Csv,我有一个生成的CSV文件 没有标题 在每一行中交替出现标题和数据(标题不会随行变化) 例如: 在我看来,这种格式是多余和麻烦的(我不明白为什么有人会用这种格式生成文件)。相同数据的正常/正常CSV(我可以使用pd.read\u CSV()直接读取): 我的问题是,如何将原始数据读取到pd数据框中?现在,我执行读取\u csv,然后删除所有备用列: df=pd.read_csv(file, header=None) df=df[range(1, len(df.columns), 2] 问题是我没
pd.read\u CSV()
直接读取):
我的问题是,如何将原始数据读取到pd数据框中?现在,我执行读取\u csv
,然后删除所有备用列:
df=pd.read_csv(file, header=None)
df=df[range(1, len(df.columns), 2]
问题是我没有得到标题,除非我特别指定它们
是否有一种更简单的方法告诉熊猫,该格式的每一行都有数据和标题?通过索引选择列,并使用get first row和pair值设置新列名称(假设pair columns具有与示例数据中相同的值):
通过在中建立索引来选择列,并使用get first row和pair值设置新列名称(假设pair列具有与示例数据中相同的值):
我没有进行测量,但我认为在筛选感兴趣的内容之前读取整个文件(冗余标题和实际数据)可能会有问题。因此我尝试利用可选参数
nrows
和usecols
,以(希望)限制处理CSV输入文件所需的内存量
# --- Utilities for generating test data ---
import random as rd
def write_csv(file, line_count=100):
with open(file, 'w') as f:
r = lambda : rd.randrange(100);
for i in range(line_count):
line = f"imageId,{i},feat1,{r()},feat2,{r()},feat,{r()}\n"
f.write(line)
file = 'text.csv'
# Generate a small CSV test file
write_csv(file, 10)
# --- Actual answer ---
import pandas as pd
# Read columns of the first row
dfi = pd.read_csv(file, header=None, nrows=1)
ncols = dfi.size
# Read data columns
dfd = pd.read_csv(file, header=None, usecols=range(1, ncols, 2))
dfd.columns = dfi.iloc[0, ::2].to_list()
print(dfd)
我没有进行测量,但我认为在筛选感兴趣的内容之前读取整个文件(冗余标题和实际数据)可能会有问题。因此我尝试利用可选参数
nrows
和usecols
,以(希望)限制处理CSV输入文件所需的内存量
# --- Utilities for generating test data ---
import random as rd
def write_csv(file, line_count=100):
with open(file, 'w') as f:
r = lambda : rd.randrange(100);
for i in range(line_count):
line = f"imageId,{i},feat1,{r()},feat2,{r()},feat,{r()}\n"
f.write(line)
file = 'text.csv'
# Generate a small CSV test file
write_csv(file, 10)
# --- Actual answer ---
import pandas as pd
# Read columns of the first row
dfi = pd.read_csv(file, header=None, nrows=1)
ncols = dfi.size
# Read data columns
dfd = pd.read_csv(file, header=None, usecols=range(1, ncols, 2))
dfd.columns = dfi.iloc[0, ::2].to_list()
print(dfd)
可能有一些模糊的业务需求以这种方式定义了csv,没有文档或指南吗?如果列一致,下面的答案会很好。可能有一些模糊的业务需求以这种方式定义了csv,没有文档吗使用它的提示或指导?如果列一致,那么下面的答案将很有效。您似乎在
df=pd.read\u csv(文件,标题=None)上构建解决方案
。请原谅我可能愚蠢的问题:pd.read\u csv
是否包含一些懒惰的机制,这些机制一开始不会消耗所有冗余头的内存?@Wolf-老实说,不知道。我对熊猫世界比较陌生:你能确认我的回答显示了一种资源消耗较少的方法吗?你似乎是基于df构建解决方案的=pd.read\u csv(文件,标题=无)
。请原谅我可能愚蠢的问题:pd.read\u csv
是否包含一些懒惰的机制,这些机制一开始不会消耗所有冗余头的内存?@Wolf-老实说,不知道。我对熊猫世界比较陌生:你能确认我的回答显示了一种资源消耗较少的方法吗?我想,如果你要逐行阅读的话行,您也可以创建数据帧,而不是添加新的磁盘写入和读取。我认为,如果您要逐行读取数据帧,您也可以创建数据帧,而不是添加新的磁盘写入和读取。
#default headers
df = pd.read_csv(file, header=None)
df1 = df.iloc[:, 1::2]
df1.columns = df.iloc[0, ::2].tolist()
print (df1)
imageId feat1 feat2 feat
0 0 30 34 90
1 1 0 4 89
2 2 3 3 80
# --- Utilities for generating test data ---
import random as rd
def write_csv(file, line_count=100):
with open(file, 'w') as f:
r = lambda : rd.randrange(100);
for i in range(line_count):
line = f"imageId,{i},feat1,{r()},feat2,{r()},feat,{r()}\n"
f.write(line)
file = 'text.csv'
# Generate a small CSV test file
write_csv(file, 10)
# --- Actual answer ---
import pandas as pd
# Read columns of the first row
dfi = pd.read_csv(file, header=None, nrows=1)
ncols = dfi.size
# Read data columns
dfd = pd.read_csv(file, header=None, usecols=range(1, ncols, 2))
dfd.columns = dfi.iloc[0, ::2].to_list()
print(dfd)