sort_values() got an unexpected keyword argument ‘by‘

1.发现问题

在编程的时候发现在自定义函数里调用sort_values()报错

TypeError: sort_values() got an unexpected keyword argument 'by'

sort_values()用法:

DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False, key=None)

参数讲解:

  • by:要排序的名称或名称列表。(如果轴为 0 或“索引”,则 by 可能包含索引级别或列标签。如果轴为 1 或“列”,则 by 可能包含列级别或索引标签。

  • axis:要排序的轴。若axis=0或'index',则按照指定列中数据大小排序;若axis=1或'columns',则按照指定索引中数据大小排序,默认axis=0

  • ascending:bool或bool的列表,默认为True,即为升序排列。 为多个排序顺序指定列表。如果这是一个布尔值列表,则必须匹配by的长度。

  • inplace:是否用排序后的数据集替换原来的数据,默认为False,即不替换。

  • kind: 排序算法的选择。对于DataFrames,此选项仅在对单个列或标签排序时应用。

  • na_position:如果是第一个,则将NaNs放在开头;如果是最后一个,把NaNs放在最后。

  • ignore_index:如果为True,则结果轴将被标记为0,1,,n - 1。

  • key:在排序之前对值应用键函数。这类似于内置sorted()函数中的key参数,显著的区别是这个key函数应该是向量化的。它应该期望一个Series,并返回一个与输入具有相同形状的Series。它将被独立地应用到每一列。

2.找出问题所在

思来想去发现是在自定义函数中才会出现这样的错误,并不是语法上的错误

错误的代码大致如下:

import pandas as pd

def getData():
    df = pd.read_csv("datas_map.csv")
    df.index = pd.to_datetime(df.index)
    print(type(df))
    df.sort_values(by = 'date',inplace = True)
    data = df.close
    data = data.fillna(0)
    return data

def matching(df1,df2):
    if(df1.index[0] > df2.index[0]):
        i = 0
        while df2.index[i]<df1.index[0]:
            a = pd.DataFrame(0,df2.index[i])
            df1 = df1.append(a,ignore_index=True)
            i += 1     
    if(df1.index[0] < df2.index[0]):
        i = 0
        while df1.index[i]<df2.index[0]:
            a = pd.DataFrame(0,df1.index[i])
            df2 = df2.append(a,ignore_index=True)
            i += 1
    print(type(df1))
    df1.sort_values(by="date",inplace = True)   
    df2.sort_values(by="date",inplace = True)
    return df1,df2

df1 = getData()
df2 = df1[10:100]
df1,df2 = matching(df1,df2)

在getData函数中df是pandas.core.frame.DataFrame类型,而df1 = getData()时df1意外赋值成pandas.core.series.Series类型,而matching(df1,df2)导入的是pandas.core.series.Series类型。

在pandas中dataFrame调用sort_values()时可以使用by关键词,而series使用by关键词会报错。

3.解决问题

由于series(序列)不能调用by关键词,我们只需在matching(df1,df2)函数下加上

df1 = pd.DataFrame(df1,df1.index)
df2 = pd.DataFrame(df2,df2.index)

就可以了

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值