Не указана длина оси для типа объекта, выполняется попытка сортировки по длине фрейма данных и маскирование его на второй фрейм данных - PullRequest
1 голос
/ 11 февраля 2020

У меня есть 2 кадра данных, которые я хочу отсортировать значения первого кадра данных по длине строки, которую я использовал str.len () , чтобы затем отсортировать второй кадр данных на основе индекса второго фрейм данных Я пытаюсь использовать pandas .masking , но дает мне ошибку, какие-либо советы?
Индекс обоих фреймов данных совпадают. мой код

wdata = pd.read_csv(fileinput, nrows=0).columns[0]
skip = int(wdata.count(' ') == 0)
wdata = pd.read_csv(fileinput, names=['sentences'], skiprows=skip)

length= wdata['sentences'].str.len().sort_values()
print(length)
sort= wdata['sentences'].sort_values('length', ascending=True, inplace=True).any(axis=1)
df=sort

print(df)

df2 = pd.read_csv(fileinput, nrows=0).columns[0]
skip = int(df2.count(' ') == 0)
df2 = pd.read_csv(fileinput, names=['sentences'], skiprows=skip)
newdata2 = df2[df2.sort(df.index)]
print(newdata2)

----------------------
#first dataframe example 
----------------------
#how are you 
#I want to die
#I was home
#I went to sleep at work
#he have a bad reputation
#it was me who went to him 
#have  good sleep home
#yes
#I'm good

----------------------
#second  dataframe example 
----------------------
#halaw kuy bashii
#damawe bmrm 
#la malawa bum
#la esh nustm 
#aw kabraya bash nya 
#awa mn bum chum bo lay
#xaweki xosh basar bba la malawa
#bale
#mn bashm 

ожидаемый результат:

enter image description here

enter image description here

ошибки, которые я получаю

raise ValueError("No axis named {0} for object type {1}".format(axis, cls))
ValueError: No axis named length for object type <class 'pandas.core.series.Series'>

что я делаю не так, какие-либо идеи, чтобы решить эту проблему, пожалуйста?

1 Ответ

1 голос
/ 11 февраля 2020

Для первого использования Series.argsort для позиций отсортированных значений, поэтому перейдите к DataFrame.iloc:

idx = wdata['sentences'].str.len().argsort()
df = wdata.iloc[idx]
print (df)
                   sentences
7                        yes
8                    Im good
2                 I was home
0               how are you 
1              I want to die
6      have  good sleep home
3    I went to sleep at work
4   he have a bad reputation
5  it was me who went to him

Если хотите выбрать один столбец для Серия:

sentences = df['sentences']

Для повторного использования, если такие же значения индекса, как wdata:

newdata2 = df2.iloc[idx]
...