如何删除pandas列Python

时间:2018-04-04 14:46:01

标签: python list pandas numpy duplicates

我正在尝试删除Pandas DataFrame中列下的字符串列表中的重复字符串。

例如;列表值:

[btc, btc, btc]

应该是;

[btc]

我尝试了多种方法,但似乎没有一种方法可行,因为我无法访问列表中的字符串值。非常感谢任何帮助。

数据帧:

          dollar_sign  followers_count  \
0                   [btc]            35946
1                   [btc]            35946
2                   [btc]            35946
3                   [nav]            35946
4         [btc, btc, btc]            35946

访问列

下的字符串列表
for row in df_twitter['dollar_sign']:
    print row

输出:

[btc]
[btc]
[btc]
[nav]
[btc, btc, btc]

4 个答案:

答案 0 :(得分:2)

你可以使用套装。一套将取出副本。

因此,举例来说,保持输出的风格:

[btc]
[btc]
[btc]
[nav]
[btc]

输出:

import com.google.cloud.dialogflow.v2beta1.WebhookRequest;
import com.google.cloud.dialogflow.v2beta1.WebhookResponse;
import com.google.protobuf.Descriptors;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.Map;
import java.util.stream.Collectors;

@RestController
@RequestMapping("test")
public class TestRequestRestController {


    private static final Logger log = LoggerFactory.getLogger(TestRequestRestController.class);

    @PostMapping("test1t")
    public WebhookResponse getTest1(WebhookRequest request) {


            System.out.println(request.toString());
            return WebhookResponse.newBuilder().setFulfillmentText("Example reply 1 ").build();

    }
}

答案 1 :(得分:2)

从显示的信息来看,我认为OP的df实际上并不是字符串列表,而是看起来像列表的字符串。

从OP的打印结果中,我们看到了

[btc]
[btc]
[nav]
[btc, btc,btc]

但是,如果它是字符串列表,则应该产生

['btc']
['btc']
['btc']
['nav']
['btc', 'btc', 'btc']

解决方案:

df = pd.DataFrame({
        'dollar_sign':['[btc]','[btc]','[btc]','[nav]','[btc, btc, btc]'],
        'followers_count':[35946,35946,35946,35946,35946]}
     )


df.dollar_sign.str[1:-1].str.split(",\s").map(set)

0    {btc}
1    {btc}
2    {btc}
3    {nav}
4    {btc}
Name: dollar_sign, dtype: object
  • .str[1:-1]删除了[]

  • str.split(",\s")以“,”,逗号和空格分隔。 (假设字符串使用“,”作为分隔符,否则,您可能需要"\s*,\s*"或更复杂的东西。)

  • map(set)将每个列表变成一个集合。

答案 2 :(得分:1)

您可以public partial class PlayerCrowdPromptPage: INotifyPropertyChanged { public PlayerCrowdPromptPage() { InitializeComponent(); DataContext = this; } private ObservableCollection<PlayerCrowdObjectBO> childObjectOC = new ObservableCollection<PlayerCrowdObjectBO>(); public ObservableCollection<PlayerCrowdObjectBO> ChildObjectOC { get { return childObjectOC; } set { childObjectOC = value; } } private PlayerCrowdObjectBO selectedChildObject; public PlayerCrowdObjectBO SelectedChildObject { get { return selectedChildObject; } set { selectedChildObject = value; OnPropertyChanged("SelectedChildObject"); } } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) { if (PropertyChanged != null){ PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } 使用listmap可以获得唯一值

set

这就是我创建df的方式

df['dollar_sign']=list(map(set,df['dollar_sign']))
df
Out[1068]: 
  dollar_sign  followers_count
0       {btc}            35946
1       {btc}            35946
2       {btc}            35946
3       {nav}            35946
4       {btc}            35946

答案 3 :(得分:0)

更简单,它将把系列转回列表,以便您可以堆叠,卸载等:

df['column_name'] = df['column_name'].apply(set).apply(list)