如何在熊猫数据框中小写子字符串?

时间:2020-03-24 17:40:03

标签: python string pandas

我有一个像这样的熊猫数据框

String = ["".join(np.random.choice(list("PQRSTUVXYZ"), size=7)) for _ in range(7)]
Position = np.random.randint(2,7, size = 7)
df=pd.DataFrame((String,Position)).T

我想在索引为列Position的字母中应用Lower()函数。

我尝试过:

df = df[0][df[1]].str.lower()

但是它降低了整个字符串。

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

这是一个sliceslice_replace的列表理解:

df['new'] = ([df[0].str.slice_replace(
             i,i+1,df[0].str.slice(i,i+1).iloc[e].lower()).iloc[e] 
             for e,i in enumerate(df[1])])

         0  1      new
0  TZPVTRT  2  TZpVTRT
1  VSSXYUP  3  VSSxYUP
2  YUTXTQS  2  YUtXTQS
3  SZRURSU  5  SZRURsU
4  XRXQVUP  3  XRXqVUP
5  PSQZZVV  6  PSQZZVv
6  XYYXPYV  3  XYYxPYV

请注意,如果索引从1开始而不是0,则将df[0].str.slice(i,i+1)替换为df[0].str.slice(i-1,i)

答案 1 :(得分:2)

您可以索引字符串。索引到下一个字符,将该字符下移,然后添加剩余的所有内容。确实与使用Series.str.slice_replace没什么不同,但也许更具可读性。

df['new_str'] = [s[:i] + s[i].lower() + s[i+1:] for s,i in zip(df[0], df[1])]

         0  1  new_str
0  TTTQTYT  3  TTTqTYT
1  USRRUZS  2  USrRUZS
2  PPXQZZT  6  PPXQZZt
3  UZZVQRQ  3  UZZvQRQ
4  ZVUQPUV  6  ZVUQPUv
5  TRPPSVU  5  TRPPSvU
6  YYZPURQ  5  YYZPUrQ
相关问题