Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从Excel单元格中向后计数删除特定数字字符_Python_Excel_Pandas_Numpy_Dataframe - Fatal编程技术网

Python 从Excel单元格中向后计数删除特定数字字符

Python 从Excel单元格中向后计数删除特定数字字符,python,excel,pandas,numpy,dataframe,Python,Excel,Pandas,Numpy,Dataframe,我有一张Excel表格,其中我的B列有以下单词和字母的组合 (姓名Lastname 3至4数字PM/AM月日期年份) 例如: 凯文·哈特2020年5月16日下午206点 迈克尔·乔丹2020年5月6日凌晨3时39分 我想进入B列的每个单元格,删除3到4个数字以及pm或Am 我考虑过倒计时,去掉13到20的位置,因为名字会有所不同 还有其他想法和方法吗?编辑:我意识到你现在可能已经把它放在熊猫中了。如果你不这样做,你可以这样做: import pandas as pd df = pd.read

我有一张Excel表格,其中我的B列有以下单词和字母的组合

(姓名Lastname 3至4数字PM/AM月日期年份)

例如:

  • 凯文·哈特2020年5月16日下午206点
  • 迈克尔·乔丹2020年5月6日凌晨3时39分
我想进入B列的每个单元格,删除3到4个数字以及pm或Am

我考虑过倒计时,去掉13到20的位置,因为名字会有所不同


还有其他想法和方法吗?

编辑:我意识到你现在可能已经把它放在熊猫中了。如果你不这样做,你可以这样做:

import pandas as pd
df = pd.read_csv('YOURFILE.CSV')
然后在下面的代码中运行
#解决方案
下的行,将
col
更改为您列的名称,并将
col2
更改为您希望调用的新列。您可以使用
df.to_csv('outputfile.csv')
再次保存文件。祝你好运

下面是一个使用Regex的解决方案

# Sample data
import pandas as pd

df = pd.DataFrame({
    'col': ['Kevin Hart 206PM May 16 2020',
            'Michael B Jordan 0339AM May 06 2020',
           ]
})

# Solution
df['col2'] = df['col'].str.replace('\s\d{3,4}[AP]M', '')

print(df)

                                   col                          col2
0         Kevin Hart 206PM May 16 2020        Kevin Hart May 16 2020
1  Michael B Jordan 0339AM May 06 2020  Michael B Jordan May 06 2020

以下是一种使用VBA的方法:

之前:


守则:

Sub TimeKiller()
    Dim cell As Range, arr, s As String, a As String
    Dim i As Long

    For Each cell In Intersect(Range("B:B"), ActiveSheet.UsedRange)
        s = cell.Value
        If s <> "" Then
            arr = Split(s, " ")
               For i = LBound(arr) To UBound(arr)
                    a = arr(i)
                    If a Like "###AM" Or a Like "###PM" Or a Like "####AM" Or a Like "####PH" Then
                         arr(i) = ""
                     End If
                Next i
        End If
        cell.Value = Trim(Join(arr, " "))
    Next cell
End Sub
Sub TimeKiller()
变暗单元格作为范围,arr,s作为字符串,a作为字符串
我想我会坚持多久
对于Intersect(范围(“B:B”)、ActiveSheet.UsedRange中的每个单元格
s=单元值
如果是“”,那么
arr=拆分
对于i=LBound(arr)到UBound(arr)
a=arr(i)
如果是“上午”或“下午”或“上午”或“下午”或“下午”或“下午”或“上午”或“下午”之类的话,那么
arr(i)=“
如果结束
接下来我
如果结束
cell.Value=Trim(连接(arr,“”)
下一个细胞
端接头
及之后:


在windows Excel 2016+中,使用
TEXTJOIN
函数,可以使用以下公式:

=TEXTJOIN(" ",TRUE,FILTERXML("<t><s>"& SUBSTITUTE(TRIM(A1)," ","</s><s>") & "</s></t>","//s[not(contains(.,'AM')) and not(contains(.,'PM'))]"))
=TEXTJOIN(“,TRUE,FILTERXML(“&SUBSTITUTE(TRIM(A1),”“,”“)&”“”//s[not(contains(,'AM'))和not(contains(,'PM'))]))

不错,但是为什么在
[a,p]
字符类中使用逗号呢+在正则表达式中,这表示“A或P”。所以你同时在加工AM和PM。看看当你去掉逗号时它会做什么。现在,您的字符类的意思是:或A、逗号或P。这对于手头的数据来说并不重要。但是逗号是多余的=)@BertilJohannesIpsen如果我的数据是B列的话,我如何一个接一个地读取它们而不是手动输入它们?
df['new_column']=df['B'].str.replace('\s\d{3,4}[AP]M','')
。编辑:更新了我的答案。