首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取文字列的假名,其中一些值没有引号。

获取文字列的假名,其中一些值没有引号。
EN

Stack Overflow用户
提问于 2022-09-08 07:58:45
回答 1查看 50关注 0票数 1

我从SQL数据库下载了一个.csv文件,其中列值是一个字符串列表。

但是,有一些值是的,它周围没有引号标记:

代码语言:javascript
复制
  user_id  B                                    value
0      a1  3                          {no_quotations} #no quotation mark ardoun this word
1      a2  4       {"with quotations", no_quotations} #one with quotations, one without
2      a3  1  {"with quotations", "with quotations 2"} #UPDATE quotations have spaces in them.
3      a4  1          {no_quotations, no_quotations2} #2 without quotations marks
4      a6  1                      {"with quotations"} #UPDATE quotations have spaces in them 

这几个字是:

用于no_quotations

  • string字母数字的
  • 单字数字+“带引号”

的单词之间的空格

我希望将列值转换为虚拟列表。预期产出:

列值中的值在以后的迭代中可能会发生变化,所以我不希望代码依赖于值的确切字符串。

我可以为值做报价,但不是所有的

代码语言:javascript
复制
import pandas as pd 
import ast 

df = pd.read_csv("/content/SQLDB_quotations_in_literal_example.csv")
df_ = df.iloc[[2,4]]['value'].apply(lambda x: list(ast.literal_eval(x))) 
pd.merge(df, pd.get_dummies(df_.apply(pd.Series).stack()).groupby(level=0).sum(), left_index=True, right_index=True, how='outer' )

OUT: 

  user_id  B                                     value  with quotations  \
0      a1  3                           {no_quotations}              NaN   
1      a2  4        {"with quotations", no_quotations}              NaN   
2      a3  1  {"with quotations", "with quotations 2"}              1.0   
3      a4  1          {no_quotations, no_quotations_2}              NaN   
4      a6  1                       {"with quotations"}              1.0   

   with quotations 2  
0                NaN  
1                NaN  
2                1.0  
3                NaN  
4                0.0  

  • 如何处理在col值中某些字符串周围缺少的引号?
  • ,因为表是从SQL中提取的,这是存储SQL表数据的方式中的一个错误吗?或者是否有一种无需此问题的下载数据的方法?

其他重要的信息字符串“带引号”中有空格,no_quotations中没有空格。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-08 08:07:10

一种使用str.extractallpivot_table的方法

代码语言:javascript
复制
out = df.join(df['value']
 .str.extractall('(\w+)')[0]
 .droplevel(1).reset_index(name='col').assign(value=1)
 .pivot_table(index='index', columns='col', values='value', fill_value=0)
)

str.get_dummies的替代

代码语言:javascript
复制
out = df.join(df['value']
 .str.extractall('(\w+)')[0]
 .groupby(level=0).agg('|'.join).str.get_dummies()
)

产出:

代码语言:javascript
复制
  user_id  B                                    value  no_quotations  no_quotations2  with_quotations  with_quotations2
0      a1  3                          {no_quotations}              1               0                0                 0
1      a2  4       {"with_quotations", no_quotations}              1               0                1                 0
2      a3  1  {"with_quotations", "with_quotations2"}              0               0                1                 1
3      a4  1          {no_quotations, no_quotations2}              1               1                0                 0
4      a6  1                      {"with_quotations"}              0               0                1                 0

变体:允许单词中的空格:

使用以下正则表达式:r'([^",{}]*[^",{}\s])' in extractall

产出:

代码语言:javascript
复制
  user_id  B                                     value   no_quotations   no_quotations2  no_quotations  with quotations  with quotations 2
0      a1  3                           {no_quotations}               0                0              1                0                  0
1      a2  4        {"with quotations", no_quotations}               1                0              0                1                  0
2      a3  1  {"with quotations", "with quotations 2"}               0                0              0                1                  1
3      a4  1           {no_quotations, no_quotations2}               0                1              1                0                  0
4      a6  1                       {"with quotations"}               0                0              0                1                  0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73645570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档