这是我的熊猫数据框:
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会很复杂!
答案 0 :(得分:1)
使用str.extract
和replace
的一种解决方案:
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('.')