簡體   English   中英

拆分並替換熊貓數據框中的所有字符串

[英]Split and replace all strings in a pandas dataframe

我有一個大數據框,其中每一行都包含一個字符串。 我想將每個字符串分成幾列,並替換兩種字符類型。

下面的代碼完成了這項工作,但在大型數據幀上速度很慢。 有沒有比使用 for 循環更快的方法?

import re
import pandas as pd

df = pd.DataFrame(['[3.4, 3.4, 2.5]', '[3.4, 3.4, 2.5]'])

df_new = pd.DataFrame({'col1': [0,0], 'col2': [0,0], 'col3': [0,0]})

for i in range(df.shape[0]):
    df_new.iloc[i, :] = re.split(',', df.iloc[i, 0].replace('[', '').replace(']', ''))

您的解決方案應該使用Series.str.stripSeries.str.split更改:

df1 = df[0].str.strip('[]').str.split(', ', expand=True).add_prefix('col')
print(df1)
  col0 col1 col2
0  3.4  3.4  2.5
1  3.4  3.4  2.5

如果性能很重要,請使用列表理解而不是 pandas 函數:

df1 = pd.DataFrame([x.strip('[]').split(', ') for x in df[0]]).add_prefix('col')

時間

#20k rows
df = pd.concat([df] * 10000, ignore_index=True)

In [208]: %timeit df[0].str.strip('[]').str.split(', ', expand=True).add_prefix('col')
61.5 ms ± 1.68 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

In [209]: %timeit pd.DataFrame([x.strip('[]').split(', ') for x in df[0]]).add_prefix('col')
29.8 ms ± 1.85 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

你可以這樣做:

import pandas as pd
df = pd.DataFrame(['[3.4, 3.4, 2.5]', '[3.4, 3.4, 2.5]'])

df_new = df[0].str[1:-1].str.split(",", expand=True)
df_new.columns = ["col1", "col2", "col3"]

這個想法是先去掉[] ,然后再拆分,然后展開數據框。 最后一步是重命名列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM