Python 熊猫在排序时是否将整数值视为字符串?为什么?
我试图根据两列中的值对pandas数据帧进行排序。出于某种原因,它将整数视为字符串,而之前的一些代码中这些值仍然是整数。不确定是什么导致了这些变化,但无论如何:Python 熊猫在排序时是否将整数值视为字符串?为什么?,python,sorting,pandas,dataframe,Python,Sorting,Pandas,Dataframe,我试图根据两列中的值对pandas数据帧进行排序。出于某种原因,它将整数视为字符串,而之前的一些代码中这些值仍然是整数。不确定是什么导致了这些变化,但无论如何: df = contig pos ref haplotype_block hap_X hap_Y odds_ratio My_hap Sp_hap 2 5207 T 1856 T A 167.922 T A 2 5238 G 1856 C G - C G
df =
contig pos ref haplotype_block hap_X hap_Y odds_ratio My_hap Sp_hap
2 5207 T 1856 T A 167.922 T A
2 5238 G 1856 C G - C G
2 5723 A 1856 A T - A T
2 5867 C 1856 T C - T C
2 155667 G 2816 G * 1.0 N N
2 155670 T 2816 T * - N N
2 67910 C 2 C T 0.21600000000000003 T C
2 67941 A 2 A T - T A
2 68016 A 2 A G - G A
2 118146 C 132 T C 1369.0 T C
2 118237 A 132 C A - C A
2 118938 A 1157 T A 0.002 A T
df.sort_values(by=['contig', 'pos'], inplace=True, ascending=False)
print(df) #is giving me
contig pos ref haplotype_block hap_X hap_Y odds_ratio My_hap Sp_hap
2 118146 C 132 T C 1369.0 T C
2 118237 A 132 C A - C A
2 118938 A 1157 T A 0.002 A T
2 155667 G 2816 G * 1.0 N N
2 155670 T 2816 T * - N N
2 5207 T 1856 T A 167.922 T A
2 5238 G 1856 C G - C G
2 5723 A 1856 A T - A T
2 5867 C 1856 T C - T C
......
因此,它仅使用两列的第一位数字对数据进行排序(contig和pos)
。为什么会这样?还有一个非常简单的内存有效的解决方法
谢谢
编辑后详细信息:
print(df.info())
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 333 entries, 0 to 332
Data columns (total 9 columns):
contig 333 non-null int64
pos 333 non-null object
ref 333 non-null object
haplotype_block 333 non-null int64
hap_X 333 non-null object
hap_Y 333 non-null object
odds_ratio 333 non-null object
My_hap 333 non-null object
Sp_hap 333 non-null object
dtypes: int64(2), object(7)
memory usage: 23.5+ KB
None
打印(df.info())
范围索引:333个条目,0到332
数据列(共9列):
重叠333非空int64
位置333非空对象
ref 333非空对象
单倍型_block 333非空int64
hap_X 333非空对象
hap_Y 333非空对象
赔率比333非空对象
My_hap 333非空对象
Sp_hap 333非空对象
数据类型:int64(2),对象(7)
内存使用率:23.5+KB
没有一个
将值转换为整数:
df['contig'] = df['contig'].astype(int)
df['pos'] = df['pos'].astype(int)
然后使用就地排序
df.sort_values(by=['contig', 'pos'], inplace=True, ascending=True)
谢谢,将值转换为整数:
df['contig'] = df['contig'].astype(int)
df['pos'] = df['pos'].astype(int)
然后使用就地排序
df.sort_values(by=['contig', 'pos'], inplace=True, ascending=True)
谢谢,这里的数据类型是什么?
df.info()
为这些列显示了什么?你有没有试着把contig转换成intdf['contig']=df['contig'].astype(int)
同样,对于pos
这里的数据类型是什么?df.info()
为这些列显示了什么?你有没有试着把contig转换成intdf['contig']=df['contig'].astype(int)
和同样的pos