web-dev-qa-db-ja.com

Pandasを使用して、文字列列の各値に文字列プレフィックスを追加します

pandasデータフレームの上記の列の各値の先頭に文字列を追加します(優雅に)。私はすでにこれを行う方法を考え出しており、現在使用しています:

df.ix[(df['col'] != False), 'col'] = 'str'+df[(df['col'] != False), 'col']

これはやるべきことではないように思えます-他の方法を知っていますか(おそらく、その列が0またはNaNである行に文字を追加します)。

これがまだ明確でない場合、私は回したいと思います:

    col 
1     a
2     0

に:

       col 
1     stra
2     str0
71
TheChymera
df['col'] = 'str' + df['col'].astype(str)

例:

>>> df = pd.DataFrame({'col':['a',0]})
>>> df
  col
0   a
1   0
>>> df['col'] = 'str' + df['col'].astype(str)
>>> df
    col
0  stra
1  str0
147
Roman Pekar

別の方法として、applyformatと組み合わせて使用​​することもできます。また、接尾辞を追加するか、要素自体を操作する必要があります。

df = pd.DataFrame({'col':['a', 0]})

df['col'] = df['col'].apply(lambda x: "{}{}".format('str', x))

また、目的の出力が得られます。

    col
0  stra
1  str0

Python 3.6+を使用している場合、f-stringsも使用できます。

df['col'] = df['col'].apply(lambda x: f"str{x}")

同じ出力が得られます。

F-stringバージョンは@RomanPekarのソリューションとほぼ同じ速度です(python 3.6.4):

df = pd.DataFrame({'col':['a', 0]*200000})

%timeit df['col'].apply(lambda x: f"str{x}")
117 ms ± 451 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

%timeit 'str' + df['col'].astype(str)
112 ms ± 1.04 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

ただし、formatを使用すると、実際にははるかに遅くなります。

%timeit df['col'].apply(lambda x: "{}{}".format('str', x))
185 ms ± 1.07 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
8
Cleb

dtype=strを使用してテーブルファイルをロードする場合
または列タイプを文字列df['a'] = df['a'].astype(str)に変換します
このようなアプローチを使用できます:

df['a']= 'col' + df['a'].str[:]

このアプローチにより、dfの先頭、末尾、およびサブセット文字列が許可されます。
Pandas v0.23.4、v0.24.1で動作します。以前のバージョンについては知りません。

2