Python ganti string dalam daftar dengan kamus

Saya sedang menulis kode untuk mengedit nama bidang dalam file csv untuk diimpor ke ArcMap. Saya memiliki semua nama bidang dalam daftar string. Saya memiliki kamus dengan nama bidang saat ini sebagai kuncinya, dan nama bidang baru sebagai nilainya. Saya mencoba mengulangi daftar nama bidang saat ini dan menggantinya dengan nilai dalam kamus. Saya mencoba untuk menggunakan. metode replace() dan itu tidak berfungsi untuk saya. Ini kode saya saat ini. Ada saran?

headersDict = {'Number; SEX AND AGE - Total Population':'TPop', 'Number; SEX AND AGE - Male Population':'MPop', 'Number; SEX AND AGE - Female Population':'FPop',
 'Under 5 years': '<5', '5 to 9 years': '5_9', '10 to 14 years': '10_14', '15 to 19 years': '15_19', '20 to 24 years': '20_24', '25 to 29 years': '25_29',
 '30 to 34 years': '30_34', '35 to 39 years': '35_39', '40 to 44 years': '40_44', '45 to 49 years': '45_49', '50 to 54 years': '50_54', '55 to 59 years': '55_59'
 ,'60 to 64 years': '60_64', '65 to 69 years': '65_69', '70 to 74 years': '70_74', '75 to 79 years': '75_79', '80 to 84 years': '80_84', '85 years and over': '85+',
 'Median age(years)': 'Medage', '16 years and over': '16+', '18 years and over': '18+', '21 years and over': '21+', '62 years and over': '62+',
 '65 years and over': '65+'}

 
 for header in headersList:
 header.replace('Number; SEX AND AGE - Total Population', headersDict['Number; SEX AND AGE - Total Population'])
 outfile.write(header)

Ini berbeda dengan memperbarui dengan

>>> df = pd.DataFrame({'A': [0, 1, 2, 3, 4],
..                    'B': [5, 6, 7, 8, 9],
..                    'C': ['a', 'b', 'c', 'd', 'e']})
>>> df.replace(0, 5)
    A  B  C
0  5  5  a
1  1  6  b
2  2  7  c
3  3  8  d
4  4  9  e
_7 atau
>>> df = pd.DataFrame({'A': [0, 1, 2, 3, 4],
..                    'B': [5, 6, 7, 8, 9],
..                    'C': ['a', 'b', 'c', 'd', 'e']})
>>> df.replace(0, 5)
    A  B  C
0  5  5  a
1  1  6  b
2  2  7  c
3  3  8  d
4  4  9  e
8, yang mengharuskan Anda menentukan lokasi untuk memperbarui dengan beberapa nilai

Parametersto_replace str, regex, list, dict, Series, int, float, atau None

Bagaimana menemukan nilai yang akan diganti

  • numerik, str atau regex

    • numerik. nilai numerik sama dengan to_replace akan diganti dengan nilai

    • str. string yang sama persis dengan to_replace akan diganti dengan nilai

    • regex. pencocokan regex to_replace akan diganti dengan nilai

  • daftar str, regex, atau numerik

    • Pertama, jika to_replace dan value keduanya merupakan daftar, panjangnya harus sama

    • Kedua, jika

      >>> df = pd.DataFrame({'A': [0, 1, 2, 3, 4],
      ..                    'B': [5, 6, 7, 8, 9],
      ..                    'C': ['a', 'b', 'c', 'd', 'e']})
      >>> df.replace(0, 5)
          A  B  C
      0  5  5  a
      1  1  6  b
      2  2  7  c
      3  3  8  d
      4  4  9  e
      
      9 maka semua string di kedua daftar akan ditafsirkan sebagai regex jika tidak maka akan cocok secara langsung. Ini tidak terlalu penting untuk nilai karena hanya ada beberapa regex substitusi yang dapat Anda gunakan

    • str, aturan regex dan numerik berlaku seperti di atas

  • dikt

    • Dicts dapat digunakan untuk menentukan nilai pengganti yang berbeda untuk nilai yang ada berbeda. Misalnya,

      >>> df.replace([0, 1, 2, 3], 4)
          A  B  C
      0  4  5  a
      1  4  6  b
      2  4  7  c
      3  4  8  d
      4  4  9  e
      
      0 mengganti nilai 'a' dengan 'b' dan 'y' dengan 'z'. Untuk menggunakan dict dengan cara ini, parameter nilai opsional tidak boleh diberikan

    • Untuk DataFrame, dict dapat menentukan bahwa nilai yang berbeda harus diganti di kolom yang berbeda. Misalnya,

      >>> df.replace([0, 1, 2, 3], 4)
          A  B  C
      0  4  5  a
      1  4  6  b
      2  4  7  c
      3  4  8  d
      4  4  9  e
      
      1 mencari nilai 1 di kolom 'a' dan nilai 'z' di kolom 'b' dan mengganti nilai ini dengan apa pun yang ditentukan dalam nilai. Parameter nilai tidak boleh
      >>> df.replace([0, 1, 2, 3], 4)
          A  B  C
      0  4  5  a
      1  4  6  b
      2  4  7  c
      3  4  8  d
      4  4  9  e
      
      2 dalam kasus ini. Anda dapat memperlakukan ini sebagai kasus khusus untuk meneruskan dua daftar kecuali Anda menentukan kolom untuk dicari

    • Untuk kamus bersarang DataFrame, mis. g. ,

      >>> df.replace([0, 1, 2, 3], 4)
          A  B  C
      0  4  5  a
      1  4  6  b
      2  4  7  c
      3  4  8  d
      4  4  9  e
      
      _3, dibaca sebagai berikut. lihat di kolom 'a' untuk nilai 'b' dan ganti dengan NaN. Parameter nilai opsional tidak boleh ditentukan untuk menggunakan dict bersarang dengan cara ini. Anda juga dapat membuat sarang ekspresi reguler. Perhatikan bahwa nama kolom (kunci kamus tingkat atas dalam kamus bersarang) tidak bisa berupa ekspresi reguler

  • Tidak ada

    • Ini berarti bahwa argumen regex harus berupa string, ekspresi reguler yang dikompilasi, atau daftar, dict, ndarray, atau Serangkaian elemen semacam itu. Jika nilainya juga

      >>> df.replace([0, 1, 2, 3], 4)
          A  B  C
      0  4  5  a
      1  4  6  b
      2  4  7  c
      3  4  8  d
      4  4  9  e
      
      2 maka ini harus berupa kamus atau Seri bersarang

Lihat bagian contoh untuk contoh masing-masing

nilai skalar, dict, daftar, str, regex, default Tidak ada

Nilai untuk mengganti nilai apa pun yang cocok dengan to_replace. Untuk DataFrame, dict nilai dapat digunakan untuk menentukan nilai mana yang akan digunakan untuk setiap kolom (kolom yang tidak ada di dict tidak akan diisi). Ekspresi reguler, string, dan daftar atau dikte dari objek semacam itu juga diperbolehkan

inplace bool, default Salah

Jika Benar, lakukan operasi di tempat dan kembalikan Tidak Ada

batas int, default Tidak ada

Kesenjangan ukuran maksimum untuk pengisian maju atau mundur

regex bool atau tipe yang sama dengan to_replace, default False

Apakah akan menafsirkan to_replace dan/atau nilai sebagai ekspresi reguler. Jika ini

>>> df.replace([0, 1, 2, 3], 4)
    A  B  C
0  4  5  a
1  4  6  b
2  4  7  c
3  4  8  d
4  4  9  e
5 maka to_replace harus berupa string. Alternatifnya, ini bisa berupa ekspresi reguler atau daftar, dict, atau larik ekspresi reguler yang mana to_replace harus
>>> df.replace([0, 1, 2, 3], 4)
    A  B  C
0  4  5  a
1  4  6  b
2  4  7  c
3  4  8  d
4  4  9  e
2

metode {'pad', 'isi', 'bfill'}

Metode yang digunakan when untuk penggantian, when to_replace adalah skalar, list atau tuple dan nilainya adalah

>>> df.replace([0, 1, 2, 3], 4)
    A  B  C
0  4  5  a
1  4  6  b
2  4  7  c
3  4  8  d
4  4  9  e
2

Berubah di versi 0. 23. 0. Ditambahkan ke DataFrame.

Pengembalian Seri

Objek setelah penggantian

RaisesAssertionError
  • Jika regex bukan

    >>> df.replace([0, 1, 2, 3], 4)
        A  B  C
    0  4  5  a
    1  4  6  b
    2  4  7  c
    3  4  8  d
    4  4  9  e
    
    8 dan to_replace bukan
    >>> df.replace([0, 1, 2, 3], 4)
        A  B  C
    0  4  5  a
    1  4  6  b
    2  4  7  c
    3  4  8  d
    4  4  9  e
    
    2

TypeError
  • Jika to_replace bukan skalar, seperti array,

    >>> df.replace([0, 1, 2, 3], [4, 3, 2, 1])
        A  B  C
    0  4  5  a
    1  3  6  b
    2  2  7  c
    3  1  8  d
    4  4  9  e
    
    0, atau
    >>> df.replace([0, 1, 2, 3], 4)
        A  B  C
    0  4  5  a
    1  4  6  b
    2  4  7  c
    3  4  8  d
    4  4  9  e
    
    2

  • Jika to_replace adalah

    >>> df.replace([0, 1, 2, 3], [4, 3, 2, 1])
        A  B  C
    0  4  5  a
    1  3  6  b
    2  2  7  c
    3  1  8  d
    4  4  9  e
    
    _0 dan nilainya bukan
    >>> df.replace([0, 1, 2, 3], [4, 3, 2, 1])
        A  B  C
    0  4  5  a
    1  3  6  b
    2  2  7  c
    3  1  8  d
    4  4  9  e
    
    3,
    >>> df.replace([0, 1, 2, 3], [4, 3, 2, 1])
        A  B  C
    0  4  5  a
    1  3  6  b
    2  2  7  c
    3  1  8  d
    4  4  9  e
    
    0,
    >>> df.replace([0, 1, 2, 3], [4, 3, 2, 1])
        A  B  C
    0  4  5  a
    1  3  6  b
    2  2  7  c
    3  1  8  d
    4  4  9  e
    
    5, atau
    >>> df.replace([0, 1, 2, 3], [4, 3, 2, 1])
        A  B  C
    0  4  5  a
    1  3  6  b
    2  2  7  c
    3  1  8  d
    4  4  9  e
    
    6

  • Jika to_replace adalah

    >>> df.replace([0, 1, 2, 3], 4)
        A  B  C
    0  4  5  a
    1  4  6  b
    2  4  7  c
    3  4  8  d
    4  4  9  e
    
    _2 dan regex tidak dapat dikompilasi menjadi ekspresi reguler atau berupa daftar, dict, ndarray, atau Seri

  • Saat mengganti beberapa objek

    >>> df.replace([0, 1, 2, 3], 4)
        A  B  C
    0  4  5  a
    1  4  6  b
    2  4  7  c
    3  4  8  d
    4  4  9  e
    
    8 atau
    >>> df.replace([0, 1, 2, 3], [4, 3, 2, 1])
        A  B  C
    0  4  5  a
    1  3  6  b
    2  2  7  c
    3  1  8  d
    4  4  9  e
    
    9 dan argumen to_replace tidak cocok dengan jenis nilai yang diganti

ValueError
  • Jika

    >>> df.replace([0, 1, 2, 3], [4, 3, 2, 1])
        A  B  C
    0  4  5  a
    1  3  6  b
    2  2  7  c
    3  1  8  d
    4  4  9  e
    
    3 atau
    >>> df.replace([0, 1, 2, 3], [4, 3, 2, 1])
        A  B  C
    0  4  5  a
    1  3  6  b
    2  2  7  c
    3  1  8  d
    4  4  9  e
    
    5 diteruskan ke to_replace dan nilai tetapi panjangnya tidak sama

Lihat juga

Isi nilai NA

Ganti nilai berdasarkan kondisi boolean

Penggantian string sederhana

Catatan

  • Substitusi regex dilakukan di bawah tenda dengan

    >>> s.replace([1, 2], method='bfill')
    0    3
    1    3
    2    3
    3    4
    4    5
    dtype: int64
    
    5. Aturan penggantian
    >>> s.replace([1, 2], method='bfill')
    0    3
    1    3
    2    3
    3    4
    4    5
    dtype: int64
    
    5 adalah sama

  • Ekspresi reguler hanya akan menggantikan string, yang berarti Anda tidak dapat memberikan, misalnya, ekspresi reguler yang cocok dengan angka floating point dan mengharapkan kolom dalam bingkai Anda yang memiliki tipe numerik untuk dicocokkan. Namun, jika angka floating point tersebut adalah string, maka Anda dapat melakukan ini

  • Metode ini memiliki banyak pilihan. Anda didorong untuk bereksperimen dan bermain dengan metode ini untuk mendapatkan intuisi tentang cara kerjanya

  • Ketika dict digunakan sebagai nilai to_replace, itu seperti kunci di dict adalah bagian to_replace dan nilai di dict adalah parameter nilai

Contoh

Skalar `ke_ganti` dan `nilai`

>>> s = pd.Series([1, 2, 3, 4, 5])
>>> s.replace(1, 5)
0    5
1    2
2    3
3    4
4    5
dtype: int64

>>> df = pd.DataFrame({'A': [0, 1, 2, 3, 4],
..                    'B': [5, 6, 7, 8, 9],
..                    'C': ['a', 'b', 'c', 'd', 'e']})
>>> df.replace(0, 5)
    A  B  C
0  5  5  a
1  1  6  b
2  2  7  c
3  3  8  d
4  4  9  e
_

Daftar-seperti `to_replace`

>>> df.replace([0, 1, 2, 3], 4)
    A  B  C
0  4  5  a
1  4  6  b
2  4  7  c
3  4  8  d
4  4  9  e
_

>>> df.replace([0, 1, 2, 3], [4, 3, 2, 1])
    A  B  C
0  4  5  a
1  3  6  b
2  2  7  c
3  1  8  d
4  4  9  e

>>> s.replace([1, 2], method='bfill')
0    3
1    3
2    3
3    4
4    5
dtype: int64

dict-seperti `to_replace`

>>> df.replace({0: 10, 1: 100})
        A  B  C
0   10  5  a
1  100  6  b
2    2  7  c
3    3  8  d
4    4  9  e

>>> df.replace({'A': 0, 'B': 5}, 100)
        A    B  C
0  100  100  a
1    1    6  b
2    2    7  c
3    3    8  d
4    4    9  e

>>> df.replace({'A': {0: 100, 4: 400}})
        A  B  C
0  100  5  a
1    1  6  b
2    2  7  c
3    3  8  d
4  400  9  e

Ekspresi reguler `to_replace`

>>> df = pd.DataFrame({'A': ['bat', 'foo', 'bait'],
..                    'B': ['abc', 'bar', 'xyz']})
>>> df.replace(to_replace=r'^ba.$', value='new', regex=True)
        A    B
0   new  abc
1   foo  new
2  bait  xyz

>>> df.replace({'A': r'^ba.$'}, {'A': 'new'}, regex=True)
        A    B
0   new  abc
1   foo  bar
2  bait  xyz

>>> df = pd.DataFrame({'A': [0, 1, 2, 3, 4],
..                    'B': [5, 6, 7, 8, 9],
..                    'C': ['a', 'b', 'c', 'd', 'e']})
>>> df.replace(0, 5)
    A  B  C
0  5  5  a
1  1  6  b
2  2  7  c
3  3  8  d
4  4  9  e
_0

>>> df = pd.DataFrame({'A': [0, 1, 2, 3, 4],
..                    'B': [5, 6, 7, 8, 9],
..                    'C': ['a', 'b', 'c', 'd', 'e']})
>>> df.replace(0, 5)
    A  B  C
0  5  5  a
1  1  6  b
2  2  7  c
3  3  8  d
4  4  9  e
_1

>>> df = pd.DataFrame({'A': [0, 1, 2, 3, 4],
..                    'B': [5, 6, 7, 8, 9],
..                    'C': ['a', 'b', 'c', 'd', 'e']})
>>> df.replace(0, 5)
    A  B  C
0  5  5  a
1  1  6  b
2  2  7  c
3  3  8  d
4  4  9  e
_2

Bandingkan perilaku

>>> s.replace([1, 2], method='bfill')
0    3
1    3
2    3
3    4
4    5
dtype: int64
7 dan
>>> s.replace([1, 2], method='bfill')
0    3
1    3
2    3
3    4
4    5
dtype: int64
8 untuk memahami kekhasan parameter to_replace

>>> df = pd.DataFrame({'A': [0, 1, 2, 3, 4],
..                    'B': [5, 6, 7, 8, 9],
..                    'C': ['a', 'b', 'c', 'd', 'e']})
>>> df.replace(0, 5)
    A  B  C
0  5  5  a
1  1  6  b
2  2  7  c
3  3  8  d
4  4  9  e
_3

Ketika seseorang menggunakan dict sebagai nilai to_replace, itu seperti nilai dalam dict sama dengan parameter value.

>>> s.replace([1, 2], method='bfill')
0    3
1    3
2    3
3    4
4    5
dtype: int64
7 setara dengan
>>> df.replace({0: 10, 1: 100})
        A  B  C
0   10  5  a
1  100  6  b
2    2  7  c
3    3  8  d
4    4  9  e
0

>>> df = pd.DataFrame({'A': [0, 1, 2, 3, 4],
..                    'B': [5, 6, 7, 8, 9],
..                    'C': ['a', 'b', 'c', 'd', 'e']})
>>> df.replace(0, 5)
    A  B  C
0  5  5  a
1  1  6  b
2  2  7  c
3  3  8  d
4  4  9  e
_4

Ketika

>>> df.replace({0: 10, 1: 100})
        A  B  C
0   10  5  a
1  100  6  b
2    2  7  c
3    3  8  d
4    4  9  e
1 tidak secara eksplisit diteruskan dan to_replace adalah skalar, daftar atau tupel, ganti menggunakan parameter metode (default 'pad') untuk melakukan penggantian. Jadi inilah mengapa nilai 'a' diganti dengan 10 di baris 1 dan 2 dan 'b' di baris 4 dalam kasus ini

Bagaimana cara mengganti string menggunakan kamus Python?

Untuk mengganti kata dalam string menggunakan kamus. .
Gunakan perulangan for untuk mengulangi item kamus
Gunakan str. metode replace() untuk mengganti kata dalam string dengan item kamus
str. metode replace() akan mengembalikan string baru dengan kecocokan yang diganti

Bagaimana cara mengubah nilai daftar menggunakan kamus Python?

Metode 1. Menggunakan fungsi append() . Sintaksis. kamus[baris]['kunci']. tambahkan('nilai')

Bagaimana Anda mengganti string tertentu dalam daftar?

Ganti string tertentu dalam daftar. Jika Anda ingin mengganti rangkaian elemen daftar, gunakan metode string replace() untuk setiap elemen dengan pemahaman daftar . Jika tidak ada string yang akan diganti, penerapan replace() tidak akan mengubahnya, jadi Anda tidak perlu memilih elemen dengan kondisi if.

Bisakah Anda mengonversi daftar ke kamus dengan Python?

Anda dapat mengubah daftar Python menjadi kamus menggunakan pemahaman kamus, dict. fromkeys(), atau metode zip() . Ketiga metode membuat kamus baru. Mereka tidak mengubah daftar yang ada.