我在对pandas Dataframe 进行排序时遇到了一些问题。sort_index(axis=0)导致 Dataframe 将索引排序为1 10 11 12 13…等等而sort_index(axis=1)似乎对前几行起作用,然后它就完全无序了。我简直无法理解正在发生的事情。我想要一个简单的数字排序我的索引,它似乎应该是标准设置的sort_index。
sort_index(axis=0)
sort_index(axis=1)
col17t5w1#
你有两种类型的索引,行索引(axis=0)或列索引(axis=1)当你使用axis=1时,你只是按名称排列列。它不按值对每一行重新排序。检查sort_index(axis=1)后面的列名,您将了解
(axis=0)
(axis=1)
axis=1
g6baxovj2#
最后我用
df['indices']=df.index.values.tolist()
并按新列对整个数据框进行排序。它可以工作,但它很难看,我觉得我错过了sort_index()的一些非常基本的东西
mf98qq943#
您可以将索引作为字符串类型。我在使用groupby()函数后遇到了这个问题。我通过将后来成为索引的列更改为int()来解决这个问题:df['col_name'] = df['col_name'].astype(int)。
groupby()
int()
df['col_name'] = df['col_name'].astype(int)
cczfrluj4#
我遇到了一个类似的问题,我想“人类排序”,而不是严格和字母数字排序 Dataframe 索引和列标签。我的数据框中的索引是字符串。对于方法pandas.DataFrame.sort_index,以'11'结尾的索引在以'2'结尾的索引之前。我可以用natsort包和pandas.DataFrame.reindex方法解决它。
pandas.DataFrame.sort_index
natsort
pandas.DataFrame.reindex
import pandas as pd import natsort # create a df df = pd.DataFrame(0, index=['Scaf11', 'Scaf5', 'Scaf1', 'Scaf101'], columns=['Scaf11', 'Scaf5', 'Scaf1', 'Scaf101']) # sort columns of the df df = df.reindex(columns=natsort.humansorted(df.columns)) # sort indices of the df df = df.reindex(index=natsort.humansorted(df.index))
导致这些 Dataframe :
# created dataframe Scaf11 Scaf5 Scaf1 Scaf101 Scaf11 0 0 0 0 Scaf5 0 0 0 0 Scaf1 0 0 0 0 Scaf101 0 0 0 0 # sorted dataframe (both for cols and indices) Scaf1 Scaf5 Scaf11 Scaf101 Scaf1 0 0 0 0 Scaf5 0 0 0 0 Scaf11 0 0 0 0 Scaf101 0 0 0 0
我建议您查看reindex文档。对索引重新排序或在 Dataframe 的精确位置添加新索引是有用的。例如,natsort对于自然排序字符串列表很有用。它可以在文档中提供更多的排序方法。
reindex
4条答案
按热度按时间col17t5w1#
你有两种类型的索引,行索引
(axis=0)
或列索引(axis=1)
当你使用
axis=1
时,你只是按名称排列列。它不按值对每一行重新排序。检查sort_index(axis=1)
后面的列名,您将了解g6baxovj2#
最后我用
并按新列对整个数据框进行排序。它可以工作,但它很难看,我觉得我错过了sort_index()的一些非常基本的东西
mf98qq943#
您可以将索引作为字符串类型。
我在使用
groupby()
函数后遇到了这个问题。我通过将后来成为索引的列更改为int()
来解决这个问题:df['col_name'] = df['col_name'].astype(int)
。cczfrluj4#
我遇到了一个类似的问题,我想“人类排序”,而不是严格和字母数字排序 Dataframe 索引和列标签。我的数据框中的索引是字符串。对于方法
pandas.DataFrame.sort_index
,以'11'结尾的索引在以'2'结尾的索引之前。我可以用natsort
包和pandas.DataFrame.reindex
方法解决它。导致这些 Dataframe :
我建议您查看
reindex
文档。对索引重新排序或在 Dataframe 的精确位置添加新索引是有用的。例如,natsort
对于自然排序字符串列表很有用。它可以在文档中提供更多的排序方法。