使用另一列的索引值在dataframe的一列中建立字符串索引

2024-10-02 16:22:39 发布

您现在位置:Python中文网/ 问答频道 /正文

在DataFrame中的一列中,我有一些字符串,它们的长度需要限制为同一DataFrame中另一列中存在的值

我尝试过创建一个新列,并使用普通的python字符串索引将另一列作为值

以下是我正在尝试运行的代码:

import pandas as pd

data = [[5, 'LONSTRING'], [3, 'LONGERSTRING'], [7, 'LONGESTSTRINGEVER']]
df = pd.DataFrame(data, columns=['String Limit', 'String'])

df['Short String'] = df['String'][:df['String Limit']]

print(df)

我希望有一个字符串更短的新列:

   String Limit             String  Short String
0             5          LONSTRING         LONST
1             3       LONGERSTRING           LON
2             7  LONGESTSTRINGEVER       LONGEST

相反,我得到了一个类型错误:

TypeError: cannot do slice indexing on <class 'pandas.core.indexes.range.RangeIndex'> with these indexers [0    5
1    3
2    7
Name: String Limit, dtype: int64] of <class 'pandas.core.series.Series'>

似乎字符串索引不能这样做,因为df['String Limit']是整个系列,而不仅仅是一行值—但是有其他方法可以这样做吗


Tags: 字符串代码coredataframepandasdfdatastring
1条回答
网友
1楼 · 发布于 2024-10-02 16:22:39

问题是您需要分别筛选所有值,所以使用^{}axis=1作为行循环:

df['Short String'] = df.apply(lambda x: x['String'][:x['String Limit']], axis=1)

或者在列表理解中使用zip

df['Short String'] = [x[:y] for x, y in zip(df['String'], df['String Limit'])]

print(df)
   String Limit             String Short String
0             5          LONSTRING        LONST
1             3       LONGERSTRING          LON
2             7  LONGESTSTRINGEVER      LONGEST

相关问题 更多 >