【问题标题】:Remove Specific Characters/Strings/Sequences of Characters in Python在 Python 中删除特定字符/字符串/字符序列
【发布时间】:2020-06-02 04:18:13
【问题描述】:

我正在创建一长串似乎是元组的列表,我想稍后将其转换为 Dataframe,但是某些常见的字符序列阻止了这种情况的发生。以及一小部分输出的示例:

0,"GAME_ID                      21900001
EVENTNUM                            2
EVENTMSGTYPE                       12
EVENTMSGACTIONTYPE                  0
PERIOD                              1
WCTIMESTRING                  8:04 PM
PCTIMESTRING                    12:00
HOMEDESCRIPTION                      
NEUTRALDESCRIPTION                   
VISITORDESCRIPTION                   
SCORE                             NaN
SCOREMARGIN                       NaN
PERSON1TYPE                         0
PLAYER1_ID                          0
PLAYER1_NAME                      NaN
PLAYER1_TEAM_ID                   NaN
PLAYER1_TEAM_CITY                 NaN
PLAYER1_TEAM_NICKNAME             NaN
PLAYER1_TEAM_ABBREVIATION         NaN
PERSON2TYPE                         0
PLAYER2_ID                          0
PLAYER2_NAME                      NaN
PLAYER2_TEAM_ID                   NaN
PLAYER2_TEAM_CITY                 NaN
PLAYER2_TEAM_NICKNAME             NaN
PLAYER2_TEAM_ABBREVIATION         NaN
PERSON3TYPE                         0
PLAYER3_ID                          0
PLAYER3_NAME                      NaN
PLAYER3_TEAM_ID                   NaN
PLAYER3_TEAM_CITY                 NaN
PLAYER3_TEAM_NICKNAME             NaN
PLAYER3_TEAM_ABBREVIATION         NaN
VIDEO_AVAILABLE_FLAG                0
DESCRIPTION                          
TIME_ELAPSED                        0
TIME_ELAPSED_PERIOD                 0
Name: 0, dtype: object"

而期望的输出是:

GAME_ID                      21900001
EVENTNUM                            2
EVENTMSGTYPE                       12
EVENTMSGACTIONTYPE                  0
PERIOD                              1
WCTIMESTRING                  8:04 PM
PCTIMESTRING                    12:00
HOMEDESCRIPTION                      
NEUTRALDESCRIPTION                   
VISITORDESCRIPTION                   
SCORE                             NaN
SCOREMARGIN                       NaN
PERSON1TYPE                         0
PLAYER1_ID                          0
PLAYER1_NAME                      NaN
PLAYER1_TEAM_ID                   NaN
PLAYER1_TEAM_CITY                 NaN
PLAYER1_TEAM_NICKNAME             NaN
PLAYER1_TEAM_ABBREVIATION         NaN
PERSON2TYPE                         0
PLAYER2_ID                          0
PLAYER2_NAME                      NaN
PLAYER2_TEAM_ID                   NaN
PLAYER2_TEAM_CITY                 NaN
PLAYER2_TEAM_NICKNAME             NaN
PLAYER2_TEAM_ABBREVIATION         NaN
PERSON3TYPE                         0
PLAYER3_ID                          0
PLAYER3_NAME                      NaN
PLAYER3_TEAM_ID                   NaN
PLAYER3_TEAM_CITY                 NaN
PLAYER3_TEAM_NICKNAME             NaN
PLAYER3_TEAM_ABBREVIATION         NaN
VIDEO_AVAILABLE_FLAG                0
DESCRIPTION                          
TIME_ELAPSED                        0
TIME_ELAPSED_PERIOD                 0

我怎样才能去掉开头的 0 和 ",然后去掉 TIME_ELAPSED_PERIOD 后面的垃圾?开头的 int 和底行的 int 增加 1 直到我的结尾程序,它可能会超过 320,000,所以我需要代码能够适应一系列 int 值。我认为在创建我的列表之后这样做是最容易的,所以它不应该有必要让我向您展示我的任何代码。只需系统地处理字符就可以了。谢谢!

【问题讨论】:

  • 您能否对此进行更多解释:“开始处的 int 和底行中的 int 增加 1 直到我的程序结束,这可能会超过 320,000 左右”。根据您的解释,尚不清楚您的输入数据的类型是什么。它是一个包含几批输入数据的列表,以您解释的格式一个接一个地附加,还是每批输入数据都有单独的列表?
  • 类似的数据块重复使用相同的行标题(即 PLAYER_3_ID),但每行的数据不同(这是篮球比赛的逐场比赛工作者)。该数据开头的“0”和结尾的“名称:0,dtype:对象”是我要删除的部分。下面的下一个“块”数据将以“1”开头,以“名称:1,dtype:object”结尾,之后的每个块的开头和结尾显示的数字都会加一。无论 x 的值如何,我都想完全删除 'x,"' 和 'Name: x, dtype: object"'。

标签: python pandas dataframe type-conversion tuples


【解决方案1】:

如果你输入的数据是列表的形式,你可以尝试以下方式来满足你的要求:

inputlist = Your_list_to_be_corrected  #Assign your input list here

# Now, remove the rows in the list that have the format "Name: 0, dtype: object""
inputlist = [ x for x in inputlist if "dtype: object" not in x ]

#Now, correct the rows containing GAME_ID by removing the int number and special characters
sep = 'GAME_ID'
for index, element in enumerate(inputlist):
    if "GAME_ID" in element:
        inputlist[index] = 'GAME_ID' + element.split(sep, 1)[1]

【讨论】:

  • 在 str(x) 中没有使用它,在这种情况下 x 是一个元组。但是,占有现在以空列表的形式返回。财产的结构方式是财产[0] 等于我在上面发布的整个文本块,而不仅仅是第一行。有什么方法可以搜索并删除这些不需要的字符?
  • 据我了解,您有一个名为“possessions”的列表,其中包含元组。例如,您提供的整个文本块是列表中名为“possessions”的第一个元组的内容。您能否明确说明第一个元组是否包含您作为单个字符串值提供的整个文本块?意思是,每个元组是否只包含一个字符串值,它具有您提供的整个文本块?
  • 元组中有 2 个项目。第一个是 int(出现在示例开头的 0)。第二个是一个系列(来自熊猫),但是当我从元组中获取一个选择值时,我只得到显示在数据的第二个“列”中的值。我正在努力获取实际的列名(第一列数据)和 Name: 0, dtype: object 似乎是其中之一,因为我在系列中找不到它。除非您自己有一些,否则我将不得不在某个地方寻找熊猫的帮助。我尝试将其转换为 Df,但列未按预期工作。
  • 我能够根据您的建议将其删除并转换为 Dataframe。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-25
  • 1970-01-01
  • 1970-01-01
  • 2013-10-31
  • 2011-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多