我正在尝试删除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]
答案 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));
}
}
使用list
,map
可以获得唯一值
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)