2つのテキストファイルを結合

というよりは,補間というか,任意の列に基づいて置換というか.

How to use AWK to solve this 2 Table Data Join? – StackOverflow

提示されているデータままで考える.
(元々がCSVファイルなりExcelファイルなりのデータっぽいので,
区切り情報がちゃんとあれば,非常に簡単な話だけど)

%%writefile file1
city_ascii  country iso2
Mavinga Angola  AO
Menongue    Angola  AO
Mucusso Angola  AO
Guines  Cuba    CU
Havana  Cuba    CU
Holguin Cuba    CU
Las Tunas   Cuba    CU
Manzanillo  Cuba    CU
Matanzas    Cuba    CU
Moron   Cuba    CU
Santa Clara Cuba    CU
Varadero    Cuba    CU
%%writefile file2
Firstname   Country
Fred, Havana
James, (Varadero, Cuba)
Jack (Cuba)
Harry Varadero, Cuba
Josh Cuba
Gary, Mavinga & Other, Angola
Jamie, (Angola)

不定形なテキストなので,スプレッドシート上で処理した方が効率良さそう.

関連にある様に,このやり方は効率がそんなに良くないので,
N x Mが1億を超えてくると,他の方法を考えた方が良い.

import pandas as pd


df1 = pd.read_csv('file1', sep='\s+', skiprows=1, names=['city_ascii', 'country', 'iso2'])
t = df1.loc[[6, 10], 'country']
df1.loc[[6, 10], 'city_ascii'] = df1.loc[[6, 10], 'city_ascii'].str.cat(t, sep=' ')
df1.iloc[[6, 10], 1] = df1.iloc[[6, 10], 2]

df2 = pd.read_csv('file2', sep='\t', skiprows=1, names=['Firstname', 'Country'])
df2['Country'] = df2['Firstname'].str.rsplit(' ', 1, expand=True)[[1]]
df2['Country'] = df2['Country'].str.strip('(').str.strip(')')
df2['Country'] = df2['Country'].replace(
    df1['city_ascii'].values.tolist(), 
    df1['country'].values.tolist(), 
    regex=True
)
df2
    Firstname   Country
0   Fred, Havana    Cuba
1   James, (Varadero, Cuba) Cuba
2   Jack (Cuba) Cuba
3   Harry Varadero, Cuba    Cuba
4   Josh Cuba   Cuba
5   Gary, Mavinga & Other, Angola   Angola
6   Jamie, (Angola) Angola

 
 

関連:
テキストファイルの文字列を別のテキストファイルの文字列で書き換える

カテゴリー: 未分類 パーマリンク