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]

在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)

就可以了

你可能感兴趣的:(python,开发语言)