我(非常令人惊讶地)在Pandas中使用以下格式阅读csv
时遇到一些困难(这是真实的东西 - 相信我)
如您所见,真实数据是:
我尝试过以下操作,但没有成功。
my_df = pd.read_csv('P://mypath/bogus_csv.csv',
skiprows = [0,1,2,3,4],
usecols = ([0]+ range(2,5)))
但是返回ValueError: Passed header names mismatches usecols
并且它根本不是最优的,因为我已经硬编码了usecol中的列数。
实际上,我可能事先并不知道我有多少列(日期)。
有什么想法吗? 谢谢!
编辑:这里是csv
作为文字(在崇高文字中):
Title "text"
Metric Parallel
Date Range 10 Jan 2018 - 11 Apr 2018
Content Web, Online, Fax
Label "10 Jan 2018" "11 Jan 2018" "12 Jan 2018"
"myquery" 70 108 92
以下是它在wordpad中的显示方式
答案 0 :(得分:1)
使用正则表达式空白分隔符和发布的'csv',您可以尝试:
import pandas as pd
df = pd.read_csv('sample.csv', delimiter=r"\s+", skiprows=5, header=None)
df = df.set_index(0)
df = df.T
df = df.set_index('Label')
通过一些转置和重新索引,给了我:
0 myquery
Label
10 Jan 2018 70
11 Jan 2018 108
12 Jan 2018 92
索引标签单元格中有一个恼人的0,但可能不会妨碍
另一个选择是使用一个简单的空白分隔符,它提供偏移的NaN,我们必须通过逐列分割来删除,然后连接。不太热衷于这个选项。
df = pd.read_csv('sample.csv', delimiter=" ", skiprows=5, header=None)
df = df.set_index(0)
df = df.T
dfs = []
for col in df.columns:
df_col = df[col]
df_col = df_col.dropna().reset_index(drop=True)
dfs.append(df_col)
df = pd.concat(dfs, 1).sort_index(1).set_index('Label')