2017-08-19 6 views
-1

Pandasデータフレームの値は混在してシフトされます。ただし、各列には値の特性があります。どのように自分の位置で値を並べ替えることができますか?Pandasデータフレームの値が混合されてシフトされます

  1. 'floor_no'に '/'部分文字列を含む値を含める必要があります。
  2. 'room_count'は最大2桁の数値です。
  3. sq_m_count 'に'm² '部分文字列を含める必要があります。
  4. 'price_sq'には 'USD /m²'が含まれていなければなりません。
  5. 'bs_state'に 'Have'または 'Do not have'のいずれかの値が含まれている必要があります。

Adding part of pandas dataframe.

enter image description here

+2

どのようにあなたがこのDFを取得したのですか?私は、このDFが構築される部分を修正する方が簡単だと思います... – MaxU

+0

WebサイトのXPathの場所に基づいて値を取得しました.Websiteはうまく構築されていないので、スクラップに関する問題がたくさんあります。他の18は絶対に正常です。 – Omar

+0

テスト用のURLを共有できますか? – MaxU

答えて

0

私は、各場合に見えるループを書いた ビット "18とperverty" で解決策を考え出しましたこれらの列の中には、属している列を識別し、この値を新しい列にコピーするものが含まれています。それから私は単に古いものを新しいものに置き換えました。

私はこれを「混合」の各列で行いました。このコードは私のニーズを満たし、すべての問題を解決しました。私は「倒錯した」コードがいかに短くてプロフェッショナルな機能であるかを理解しています。

for index in bina_az_df.itertuples(): 
 
    bina_az_df.loc[bina_az_df['bs_state'].str.contains(" m²|sot"),'new_sq_m_count'] = bina_az_df['bs_state'] 
 
    bina_az_df.loc[bina_az_df['sq_m_count'].str.contains(" m²|sot"),'new_sq_m_count'] = bina_az_df['sq_m_count'] 
 
    bina_az_df.loc[bina_az_df['floor_no'].str.contains(" m²|sot"),'new_sq_m_count'] = bina_az_df['floor_no'] 
 
    bina_az_df.loc[bina_az_df['price_sq'].str.contains(" m²|sot"),'new_sq_m_count'] = bina_az_df['price_sq'] 
 
    bina_az_df.loc[bina_az_df['room_count'].str.contains(" m²|sot"),'new_sq_m_count'] = bina_az_df['room_count']

bina_az_df['sq_m_count'] = bina_az_df['new_sq_m_count'] # Substitutes 
 
del bina_az_df['new_sq_m_count'] # deletes unnecesary temp column

0

次のアプローチを考えてみましょう:

In [90]: dfs = [] 

In [91]: url = 'https://ru.bina.az/items/565674' 

In [92]: dfs.append(pd.read_html(url)[0].set_index(0).T) 

In [93]: url = 'https://ru.bina.az/items/551883' 

In [94]: dfs.append(pd.read_html(url)[0].set_index(0).T) 

In [95]: df = pd.concat(dfs, ignore_index=True) 

In [96]: df 
Out[96]: 
0 Категория Площадь Количество комнат Купчая 
0 Дом/Вилла 376 м²     6 есть 
1 Дом/Вилла 605 м²     6 нет 
関連する問題