negin12 发表于 2024-5-29 09:59:40

dataframe.sort_values 输出为None

import pandas as pd
df=pd.read_excel(p)
df1=pd.read_excel(p1)
df2=pd.concat()

df3=df2.sort_values(by='日期',inplace=True,ascending=True)
print(df3)

打印结果为None
我想要得到的结果的df2按‘日期’一列排序后的dataframe。

FishC 发表于 2024-5-29 09:59:48

问题出在你使用了inplace=True这个参数。sort_values方法默认情况下是不改变原始DataFrame的,而是返回一个排序后的新DataFrame。如果你想要改变原始DataFrame,你需要将inplace参数设置为True,但是这种情况下sort_values方法会返回None,因此打印出来的结果是None。

解决办法是不使用inplace参数,直接将排序后的DataFrame赋值给新的变量:

df3 = df2.sort_values(by='日期', ascending=True)
print(df3)

或者你也可以在进行排序的同时修改原始DataFrame:

df2.sort_values(by='日期', inplace=True, ascending=True)
print(df2)

这两种方式都会打印出按照日期排序后的DataFrame。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

negin12 发表于 2024-5-29 10:05:45

FishC 发表于 2024-5-29 09:59
问题出在你使用了inplace=True这个参数。sort_values方法默认情况下是不改变原始DataFrame的,而是返回一个 ...

但是输出的日期并没有排序

FishC 发表于 2024-5-29 10:05:54

negin12 发表于 2024-05-29 10:05
但是输出的日期并没有排序

对不起,我之前的回答有误。在你的代码中,你没有给sort_values()方法指定inplace参数的值,默认为False,因此它会返回一个排序后的新DataFrame,并不会改变原始的df2。

要实现按日期排序并改变原始的df2,你可以将inplace参数设置为True,然后打印df2来查看结果:

df2.sort_values(by='日期', inplace=True, ascending=True)
print(df2)

如果你想要一个新的排序后的DataFrame,你可以将排序结果赋值给一个新的变量,并打印这个变量:

df3 = df2.sort_values(by='日期', ascending=True)
print(df3)

这两种方式都可以得到按日期排序后的DataFrame。请确认一下你的日期列的数据类型是否正确,确保它是日期类型而不是字符串类型,这样才能按照日期进行正确的排序。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

negin12 发表于 2024-5-29 10:07:33

FishC 发表于 2024-5-29 10:05
对不起,我之前的回答有误。在你的代码中,你没有给sort_values()方法指定inplace参数的值,默认为Fals ...

这两个都试过了,得到的依然是没有排序的dataframe

FishC 发表于 2024-5-29 10:07:40

negin12 发表于 2024-05-29 10:07
这两个都试过了,得到的依然是没有排序的dataframe

非常抱歉给你带来困惑。我注意到你在调用concat()函数时,并没有传入任何要连接的DataFrame。这可能是导致排序无效的原因之一。

请确保你在concat()函数中传入了你要连接的DataFrame,如下所示:

df2 = pd.concat()# 将df和df1连接为df2

然后,你可以使用sort_values()方法对df2进行排序:

df2.sort_values(by='日期', inplace=True, ascending=True)

你可以使用print语句打印出排序后的df2,来验证排序是否成功:

print(df2)

请注意,这只能保证按照日期列进行排序,如果你的日期列格式不正确(比如字符串而不是日期类型),可能会导致排序不准确。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

negin12 发表于 2024-5-29 10:16:09

因为需要对不同日期插入不同的数据,所以对‘日期’一列的值改为list,去重,变回list,再排序。然后用
l=sorted(list(set(list(df2l['日期'].values))))
for i in l:
    df3=df2.loc==i]
    df3['count'] = count + 1

FishC 发表于 2024-5-29 10:16:22

negin12 发表于 2024-05-29 10:16
因为需要对不同日期插入不同的数据,所以对‘日期’一 ...

根据你的描述,你想要对DataFrame中的日期列进行排序,并根据不同的日期插入不同的数据。你的代码中有一些语法错误,我来帮你修正一下:

# 将‘日期’列的值转换为列表,并去重
date_list = list(set(df2['日期'].tolist()))

# 对日期列表进行排序
sorted_dates = sorted(date_list)

count = 0
for date in sorted_dates:
    # 根据日期筛选数据
    df3 = df2.loc == date]
   
    # 做一些与日期相关的操作,这里只是一个示例,你可以自行补充
    count += 1
    # ...

# 打印排序后的结果
print(df2)

在这段代码中,我将`df2['日期']`的值转换为一个列表,并使用`set`函数去重。然后,对日期列表进行排序,并使用一个循环遍历排序后的日期列表。在循环中,首先通过`df2.loc == date]`筛选出和当前日期相等的行,然后可以进行与日期相关的操作。这里只是示例代码,你可以根据实际需要进行修改。最后,我添加了一个计数器`count`,你可以根据需要自行使用。最后,通过`print(df2)`打印出排序后的DataFrame。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: dataframe.sort_values 输出为None