我有一个大型的pandas数据框,我按操作运行组。
CHROM POS Data01 Data02 ......
1 ....................
1 ...................
2 ..................
2 ............
scaf_9 .............
scaf_9 ............
所以,我正在做:
my_data_grouped = my_data.groupby('CHROM')
for chr_, data in my_data_grouped:
do something in chr_
write something from that chr_ data
小数据和没有字符串类型CHROM
即scaff_9
的数据中的一切都很好。但是,对于非常大的数据和scaff_9
,我得到两组2
。它实际上不是错误消息,它不会影响计算。问题是我在文件中按组写数据;我得到两组2
(分裂不均等)。
我很难追溯到这个问题的根源,因为没有错误信息,而且数据量很小,它运行良好。 我唯一的假设是:
pandas
模块可以处理的总数据帧与分组数据帧中的行数有一定的限制。这个问题的解决方法是什么?2
中,大多数被视为整数对象,而一些(后来的部分)被视为接近scaff_9
的字符串对象。这可能吗?抱歉,我只是在这里做出我的假设,而且我不可能知道问题的根源。
发布编辑:
在尝试sort_by(['CHROM'])
之前,我还试图运行groupby
,但问题仍然存在。
对问题的任何可能的解决方法。
谢谢,
答案 0 :(得分:1)
在我看来存在数据问题,显然有一些空白,所以大熊猫分别处理每个组。
解决方案应首先删除traling空格:
df.index = df.index.astype(str).str.strip()
您还可以检查index
的唯一字符串值:
a = df.index[df.index.map(type) == str].unique().tolist()
如果第一列不是索引:
df['CHROM'] = df['CHROM'].astype(str).str.strip()
a = df.loc[df['CHROM'].map(type) == str, 'CHROM'].unique().tolist()
编辑:
最后的最终解决方案更简单 - 转换为str
,如:
df['CHROM'] = df['CHROM'].astype(str)