Att*_*zma 0 python dataframe pandas
我正在从美国系统获取数据。我在CSV中得到的数字是字符串“(100)”,我必须将其转换为-100整数。我在数据框中有N个列,我必须对所有列都这样做。
我现在正在做的是将所有括号替换为空和负值符号。这不是最佳解决方案,因为它正在转换数据帧中的所有给定值。
import pandas as pd
df=pd.read_csv('American.csv', thousands=r',')
df=df.apply(lambda z: z.astype(str).str.replace(')',''))
df=df.apply(lambda z: z.astype(str).str.replace('(','-'))
Run Code Online (Sandbox Code Playgroud)
我的期望:
"(100)" -> -100
"Nick (Jones)" ->"Nick **(Jones)**"
Run Code Online (Sandbox Code Playgroud)
我得到的是:
"(100)" -> -100
"Nick (Jones)" ->"Nick **-Jones**"
Run Code Online (Sandbox Code Playgroud)
我需要一个代码,用所有列的数字进行必要的转换,但又不打扰其他值。
使用pandas.DataFrame.replace有regex=True:
df = pd.DataFrame(["(100)", "Nick (Jones)"])
new_df = df.replace('\((\d+)\)', '-\\1',regex=True)
print(new_df)
Run Code Online (Sandbox Code Playgroud)
输出:
0
0 -100
1 Nick (Jones)
Run Code Online (Sandbox Code Playgroud)
正则表达式:
在方括号对(组#1)中捕获任意位数,并将其放在方括号(组-1)中。