如何在熊猫数据框中编辑线?

时间:2019-06-21 20:57:07

标签: python pandas dataframe

这是我的熊猫数据框:

C:\BlokusDuo-master\app\src\main\java\blokusgame\mi\android\hazi\blokus\GameLogic\Block.java                 
C:\BlokusDuo-master\app\src\main\java\blokusgame\mi\android\hazi\blokus\GameLogic\BlockFactory.java          
C:\BlokusDuo-master\app\src\main\java\blokusgame\mi\android\hazi\blokus\GameLogic\Map.java                    
C:\BlokusDuo-master\app\src\main\java\blokusgame\mi\android\hazi\blokus\GameLogic\Player.java                 
C:\BlokusDuo-master\app\src\main\java\blokusgame\mi\android\hazi\blokus\GameLogic\PlayerAlgorithm.java        
C:\BlokusDuo-master\app\src\main\java\blokusgame\mi\android\hazi\blokus\GameLogic\PlayerConstants.java        

我需要提取第六个'\'分隔符之后的字符串,并将其余的每个'\'替换为。

Output exemple for the first line:
blokusgame.mi.android.hazi.blokus.GameLogic.Block.java      

如果我使用split会很复杂!

3 个答案:

答案 0 :(得分:1)

使用str.extractreplace的一种解决方案:

df = pd.DataFrame({'x':[r'C:\BlokusDuo-master\app\src\main\java\blokusgame\mi\android\hazi\blokus\GameLogic\Block.java',
                        r'C:\BlokusDuo-master\app\src\main\java\blokusgame\mi\android\hazi\blokus\GameLogic\BlockFactory.java',
                        r'C:\BlokusDuo-master\app\src\main\java\blokusgame\mi\android\hazi\blokus\GameLogic\Map.java',
                        r'C:\BlokusDuo-master\app\src\main\java\blokusgame\mi\android\hazi\blokus\GameLogic\Player.java',
                        r'C:\BlokusDuo-master\app\src\main\java\blokusgame\mi\android\hazi\blokus\GameLogic\PlayerAlgorithm.java',
                        r'C:\BlokusDuo-master\app\src\main\java\blokusgame\mi\android\hazi\blokus\GameLogic\PlayerConstants.java']})

df['y'] = df['x'].str.extract(r'^.*\\java\\(.*)$')
df['y'].replace(r'\\', r'.', regex=True, inplace=True)

收益

blokusgame.mi.android.hazi.blokus.GameLogic.Block.java
blokusgame.mi.android.hazi.blokus.GameLogic.BlockFactory.java
blokusgame.mi.android.hazi.blokus.GameLogic.Map.java
blokusgame.mi.android.hazi.blokus.GameLogic.Player.java
blokusgame.mi.android.hazi.blokus.GameLogic.PlayerAlgorithm.java
blokusgame.mi.android.hazi.blokus.GameLogic.PlayerConstants.java

您可以使用正则表达式在文本字符串中找到键“ break”(在本例中为\java\),而不是查找第N个斜杠,然后提取所有内容。然后,您可以将\替换为.

答案 1 :(得分:0)

也许是这样的:

import re

s = r"C:\BlokusDuo-master\app\src\main\java\blokusgame\mi\android\hazi\blokus\GameLogic\Block.java"

def replace_sixth(s):
    iterator = re.finditer("\\\\",s)
    location = [ next(iterator) for _ in range(6) ][-1]
    start = location.start()+1
    return s[start:].replace("\\",".")

然后您将其应用于数据框:df.apply(replace_sixth)

答案 2 :(得分:0)

关于熊猫,您需要了解两件事。

第一: 数据框列(或熊猫系列)上的str操作允许您使用字符串进行任何操作 例如df.columnname.str.replace()df.columnname.str.capitalize()等。

2nd正在建立索引: 拆分时,您将有一个列表,您想使用第6项

str[<index_here>] 

str[<start>:<end>]

如果您了解这两件事,则可以在一小段时间内完成。

df['fixed_filenames'] = df.files_column.str.split("\\").str[6:].str.join('.')