Python 如何处理熊猫中不整洁的数据?
首先,我必须说,我对Python和Pandas相当陌生,但我希望将来更多地使用它们,因此我正在尝试使用它们。由于我的工作,我经常使用Excel,经常遇到数据(行)有其属性(列)的问题,但有时一些数据(行)可能有第三维度。下面是一个简单的Pandas dataframe示例来说明我的意思:Python 如何处理熊猫中不整洁的数据?,python,pandas,dataframe,Python,Pandas,Dataframe,首先,我必须说,我对Python和Pandas相当陌生,但我希望将来更多地使用它们,因此我正在尝试使用它们。由于我的工作,我经常使用Excel,经常遇到数据(行)有其属性(列)的问题,但有时一些数据(行)可能有第三维度。下面是一个简单的Pandas dataframe示例来说明我的意思: df = pd.DataFrame(data={"obs":[["test1","test2"],"test1"], "result":[[101,103],200]},i
df = pd.DataFrame(data={"obs":[["test1","test2"],"test1"],
"result":[[101,103],200]},index=["subj1","subj2"])
df
obs result
subj1 [test1, test2] [101, 103]
subj2 test1 200
你一般是怎么处理的?我阅读了术语“整洁数据”,其中每个值都应该有自己的单元格。我应该为每个异常主题添加columns=>obs1、obs2、result1、result2还是添加行,比如:subs1\u 1、subs1\u 2属性(列)保持不变时,什么更有意义。多索引在这里有意义吗?我读了一些关于它的书,但我还不知道如何有效地使用它们。我一直在寻找那个主题,但没有任何东西能帮助我具体化。在你的例子中,我认为主题不是一个好的索引。我建议使用数字增量索引或多索引。以后更容易处理。考虑一个例子:
df = pd.DataFrame(
data={
'subj':["subj1","subj1", "subj1", "subj1", "subj2", "subj2","subj2", "subj2", "subj3", "subj3"] ,
"obs":["test1","test2","test2","test1",'test1','test1','test2','test2','test1','test2'],
"result":[101,103,105,110, 203,159,193,285,400,543]
}
)
df
subj obs result
0 subj1 test1 101
1 subj1 test2 103
2 subj1 test2 105
3 subj1 test1 110
4 subj2 test1 203
5 subj2 test1 159
6 subj2 test2 193
7 subj2 test2 285
8 subj3 test1 400
9 subj3 test2 543
让我们考虑一下,为每个唯一的子J计算平均结果。由于所有数据点都有自己的行,因此可以使用panda的函数:和
或者,如果要计算每个主题和对象的平均值df.groupby(['subj','obs']).mean()
result
subj obs
subj1 test1 105.5
test2 104.0
subj2 test1 181.0
test2 239.0
subj3 test1 400.0
test2 543.0
如果您在从excel导入数据后遇到列表中的数据点,我建议您编写一个函数,将1中的n行和它跨1个轴
希望有帮助 恐怕这是一个太宽泛的问题。常见的方法取决于实际情况。无论如何,请求外部资源在这里显然是离题的。非常确定这应该是三行,主题1重复两次。有很多关于熊猫如何帮助你到达那里的信息。这与“数据库规范化”密切相关,在“数据库规范化”中有很多相关文献。是的,我也认为它可能太宽泛了,但不知道如何写得更明确。我将删除外部资源问题,删除关于question@Arkady:谢谢你的回答。我将接受您的回答,因为只要列表是列值,您的语句就可以创建多行。
df.groupby(['subj','obs']).mean()
result
subj obs
subj1 test1 105.5
test2 104.0
subj2 test1 181.0
test2 239.0
subj3 test1 400.0
test2 543.0