Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.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 如何使用Pandas从一个文件中读取多个数据集?_Python_Pandas - Fatal编程技术网

Python 如何使用Pandas从一个文件中读取多个数据集?

Python 如何使用Pandas从一个文件中读取多个数据集?,python,pandas,Python,Pandas,我有一个文件,其中包含多组由行分隔的数据。它看起来像: country1 0.9 1.3 2.9 1.1 ... country2 4.1 3.1 0.2 ... 我想使用Pandas将整个文件读入多个数据帧,其中每个数据帧对应一个国家。有什么简单的方法可以做到这一点吗?每个国家都有不同数量的条目。您可以通过使用errors='concurve'创建mask,因此获取NaN列名的位置。然后通过以下方式查找并创建组: 最后使用列表理解查看数据帧列表: dfs

我有一个文件,其中包含多组由行分隔的数据。它看起来像:

country1  
0.9  
1.3  
2.9  
1.1  
...  
country2  
4.1  
3.1  
0.2
...

我想使用Pandas将整个文件读入多个数据帧,其中每个数据帧对应一个国家。有什么简单的方法可以做到这一点吗?每个国家都有不同数量的条目。

您可以通过使用
errors='concurve'
创建
mask
,因此获取
NaN
列名的位置。然后通过以下方式查找并创建组:

最后使用
列表理解
查看
数据帧列表

dfs = [g[1:].rename(columns={0:g.iloc[0].values[0]}) for i, g in df.groupby(mask)]

print (dfs)

print (dfs[0])
  country1
1      0.9
2      1.3
3      2.9
4      1.1

print (dfs[1])
  country2
6      4.1
7      3.1
8      0.2
如果需要重置索引:

dfs = [g[1:].rename(columns={0:g.iloc[0].values[0]}).reset_index(drop=True) for i, g in df.groupby(mask)]

print (dfs)

print (dfs[0])
  country1
0      0.9
1      1.3
2      2.9
3      1.1
print (dfs[1])
  country2
0      4.1
1      3.1
2      0.2

Pandas支持csv和json等标准文件格式,但这不是其中之一。我假设手工重新格式化文件是浪费时间,建议您自己使用
和open(…)作为f:
f.readlines()
将文件解析为python对象

假设您已经这样做了,并且格式看起来像
数据
,那么来自_dict()的
应该可以工作:

data = { "countryName1": [0.9, 1.3, ...], "countryName2": [...]} 
df = pd.DataFrame.from_dict(data)

@ArturJ无论国家是否按数字排序,该解决方案都应该有效。jezrael正在使用
is_numeric
来识别那些不是数字的条目,以便识别子数据帧的结束和开始位置。只有当数据本身不是数字或国家名为
5.3
时,才会出现问题。总之,你应该准备好了。@ArturJ同样,如果这回答了你的问题,请记住把它标记为答案。如果你有后续问题,请随意再问一个问题。我才意识到我从来没有感谢过你出色的回答。非常感谢。
dfs = [g[1:].rename(columns={0:g.iloc[0].values[0]}).reset_index(drop=True) for i, g in df.groupby(mask)]

print (dfs)

print (dfs[0])
  country1
0      0.9
1      1.3
2      2.9
3      1.1
print (dfs[1])
  country2
0      4.1
1      3.1
2      0.2
data = { "countryName1": [0.9, 1.3, ...], "countryName2": [...]} 
df = pd.DataFrame.from_dict(data)