web-dev-qa-db-ja.com

Python dataframeの列の各行から最初のx個の文字を削除します

Python約1,500行と15列のデータフレームがあります。特定の1列を使用して、各行の最初の3文字を削除します。簡単な例として、データフレームを示します。

import pandas as pd

d = {
    'Report Number':['8761234567', '8679876543','8994434555'],
    'Name'         :['George', 'Bill', 'Sally']
     }

d = pd.DataFrame(d)

データフレームdReport Number列の各フィールドから最初の3文字を削除したいと思います。

17
d84_n1nj4

ベクトル化された str メソッドを使用して、各文字列エントリをスライスします

In [11]:
d['Report Number'] = d['Report Number'].str[3:]
d

Out[11]:
     Name Report Number
0  George       1234567
1    Bill       9876543
2   Sally       4434555
33
EdChum

Pandas "vectorised" strメソッドはPythonレベルのループにすぎません。

クリーンなデータを想定すると、リストの理解がより効率的になることがよくあります。

# Python 3.6.0, Pandas 0.19.2

d = pd.concat([d]*10000, ignore_index=True)

%timeit d['Report Number'].str[3:]           # 12.1 ms per loop
%timeit [i[3:] for i in d['Report Number']]  # 5.78 ms per loop

リストの内包表記ではnullデータやその他のEdgeのケースを処理しないため、これらは同等ではないことに注意してください。これらの状況では、Pandasソリューションを好むかもしれません。

1
jpp