簡體   English   中英

類型錯誤:無法連接類型為 &#39; 的對象<class 'str'> &#39;; 只有 Series 和 DataFrame 對象有效

[英]TypeError: cannot concatenate object of type '<class 'str'>'; only Series and DataFrame objs are valid

我的數據稱為 car_A :

    Source
0   CAULAINCOURT
1   MARCHE DE L'EUROPE
2   AU MAIRE

我想從源到目的地的所有路徑中找到類似的東西:


    Source                    Destination
0 CAULAINCOURT           MARCHE  DE L'EUROPE
2 CAULAINCOURT                AU MAIRE
3 MARCHE DE L'EUROPE        AU MAIRE
.
.
.

我已經試過了

for i in car_A['Names']:
  for j in range(len(car_A)-1):
    car_A = car_A.append(car_A.iloc[j+1,0])

但我得到了

TypeError: cannot concatenate object of type '<class 'str'>'; only Series and DataFrame objs are valid

我怎樣才能得到提到的數據集?

另一個解決方案,使用DataFrame.merge()

import pandas as pd

df = pd.DataFrame({'Source': [
    "CAULAINCOURT",
    "MARCHE DE L'EUROPE",
    "AU MAIRE"
]})

df = df.assign(key=1).merge(df.assign(key=1), on='key').drop('key', 1).rename(columns={'Source_x':'Source', 'Source_y':'Destination'})
df = df[df.Source != df.Destination]

print(df)

印刷:

               Source         Destination
1        CAULAINCOURT  MARCHE DE L'EUROPE
2        CAULAINCOURT            AU MAIRE
3  MARCHE DE L'EUROPE        CAULAINCOURT
5  MARCHE DE L'EUROPE            AU MAIRE
6            AU MAIRE        CAULAINCOURT
7            AU MAIRE  MARCHE DE L'EUROPE

來自@James 的好答案的一個小變化。 itertools.permutations為您刪除重復項。

import pandas as pd
from itertools import permutations

df = pd.DataFrame({'sources': [
    "CAULAINCOURT",
    "MARCHE DE L'EUROPE",
    "AU MAIRE"
]})

df_pairs = pd.DataFrame(
    [x for x in permutations(df.sources, 2)],
    columns=['source', 'dest'])

df_pairs
# returns
               source                dest
0        CAULAINCOURT  MARCHE DE L'EUROPE
1        CAULAINCOURT            AU MAIRE
2  MARCHE DE L'EUROPE        CAULAINCOURT
3  MARCHE DE L'EUROPE            AU MAIRE
4            AU MAIRE        CAULAINCOURT
5            AU MAIRE  MARCHE DE L'EUROPE

您可以使用itertools.product構建所有對的集合,當源和目標位於相同位置時過濾以移除,然后構建新的數據框。

import pandas as pd
from itertools import product

df = pd.DataFrame({'sources': [
    "CAULAINCOURT",
    "MARCHE DE L'EUROPE",
    "AU MAIRE"
]})

df_pairs = pd.DataFrame(
    filter(lambda x: x[0]!=x[1], product(df.sources, df.sources)), 
    columns=['source', 'dest']
)

df_pairs
# returns:
               source                dest
0        CAULAINCOURT  MARCHE DE L'EUROPE
1        CAULAINCOURT            AU MAIRE
2  MARCHE DE L'EUROPE        CAULAINCOURT
3  MARCHE DE L'EUROPE            AU MAIRE
4            AU MAIRE        CAULAINCOURT
5            AU MAIRE  MARCHE DE L'EUROPE


暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM