заменить функцию, дающую дополнительный символ в конце - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь очистить данные столбца в кадре данных с помощью функции замены. Вывод продолжает давать мне дополнительный символ в конце. Чем больше я запускаю один и тот же код, тем больше символов добавляется в конце. Может ли кто-нибудь помочь мне в этом, пожалуйста?

owner = ['China' 'Chinese' 'Hong Kong' 'Hongkong' 'China (Taiwan)' 'Japan'
 'Sweden' 'Canada' 'HK' 'United States' 'Indian' 'American' 'Japanese'
 'U.S.' 'Taiwanese' 115 'Australia' 'HongKong' 'France' 'Taiwan'
 'Malaysia' 'Taiwan, China' 1380 'Switzerland' 'US' 'Netherlands'
 'Chinese-Hongkong' 208 447 153 151 'Ireland' 'Taiwan China' 'china'
 'Taiwan of China' 'Mainland China' 'Chinese(HK)' 'HONG KONG OF CHINA'
 'USA' 'Korea, Republic of' 'Chinses' 1834 'South Africa' 40 184 190 427
 'German' 'Singapore' 'The philipines' 193 397 'Janpan' 'Japan and Taiwan'
 48 46 1274 'Chines' 1641 89 'Korea' 50 43 380 'Hong Kong, China'
 'China (HK)' 85 'Germany' 'English' 205 'Hongkong, China' 35
 'South Korean' 'British Virgin Islands' 'China (Hong Kong)' 156 490 94 95
 138 319 'Mandarin' 'Spainish' 'South Korea' 'Hongkong,China' 'U.S.A'
 'Hongkong China' 2583 98 'Korean' 5000 'India' 100 38 'chinese' 'The USA'
 'Canadian' 'Taiwan/HK/Macao' 'Chinese(Taiwan)' 'Republic of Korea'
 'China and South Korea' 'South korea' 'China,Korean' 'Denmark and China'
 272 256 235 143 0 'UK' 73 'Sri Lanka' 240 159 275 'Tai Wan' 192
 'China Taiwan' 225 146 78 200 'Amazon report' 'Chian' 'Not provided'
 'China, Hongkong' 'Thailand' 37 97 77 191 2951 897 140 199 636 'Macao']

dict = {'Owner': owner}

df = pd.DataFrame(dict) 

df.replace('China', 'Chinese', regex=True, inplace=True)
df.replace('china', 'Chinese', regex=True, inplace=True)
df.replace('Mainland China', 'Chinese', regex=True, inplace=True)
df.replace('Chinses', 'Chinese', regex=True, inplace=True)
df.replace('Chines', 'Chinese', regex=True, inplace=True)

df ['Владелец новый'] = np.where (df ['Владелец']! = 'Китайский', 'Foriegn', df [' Владелец '])

print(df['Owner'].unique())

Вывод получаю:

['Chinesee' 'Hong Kong' 'Hongkong' 'Chinesee (Taiwan)' 'Japan' 'Sweden'
 'Canada' 'HK' 'United States' 'Indian' 'American' 'Japanese' 'U.S.'
 'Taiwanese' 115 'Australia' 'HongKong' 'France' 'Taiwan' 'Malaysia'
 'Taiwan, Chinesee' 1380 'Switzerland' 'US' 'Netherlands'
 'Chinesee-Hongkong' 208 447 153 151 'Ireland' 'Taiwan Chinesee'
 'Taiwan of Chinesee' 'Mainland Chinesee' 'Chinesee(HK)'
 'HONG KONG OF CHINA' 'USA' 'Korea, Republic of' 1834 'South Africa' 40
 184 190 427 'German' 'Singapore' 'The philipines' 193 397 'Janpan'
 'Japan and Taiwan' 48 46 1274 'Chinese' 1641 89 'Korea' 50 43 380
 'Hong Kong, Chinesee' 'Chinesee (HK)' 85 'Germany' 'English' 205
 'Hongkong, Chinesee' 35 'South Korean' 'British Virgin Islands'
 'Chinesee (Hong Kong)' 156 490 94 95 138 319 'Mandarin' 'Spainish'
 'South Korea' 'Hongkong,Chinesee' 'U.S.A' 'Hongkong Chinesee' 2583 98
 'Korean' 5000 'India' 100 38 'chinese' 'The USA' 'Canadian'
 'Taiwan/HK/Macao' 'Chinesee(Taiwan)' 'Republic of Korea'
 'Chinesee and South Korea' 'South korea' 'Chinesee,Korean'
 'Denmark and Chinesee' 272 256 235 143 0 'UK' 73 'Sri Lanka' 240 159 275
 'Tai Wan' 192 'Chinesee Taiwan' 225 146 78 200 'Amazon report' 'Chian'
 'Not provided' 'Chinesee, Hongkong' 'Thailand' 37 97 77 191 2951 897 140
 199 636 'Macao']

1 Ответ

0 голосов
/ 09 апреля 2020

В вашем случае вы также заменяете подстроки (как объяснено в моем комментарии). Поскольку вы пытаетесь заменить целые слова, вы должны добавить ^ и $ в начале и конце слов соответственно. Тогда будут заменены только целые слова, которые соответствуют. Например:

Вышеуказанный случай:

>>> df = pd.DataFrame(["Chinese"])
>>> df.replace("Chines", "China", regex=True)
        0
0  Chinae

Решение 1: с помощью регулярных выражений ^ и $.

>>> df.replace("^Chines$", "China", regex=True)
         0
0  Chinese

Решение 2: установить regex=False такой, что сопоставляются только целые слова. (регулярное выражение по умолчанию False)

>>> df.replace("Chines", "China")
         0
0  Chinese
...