操作字符串以删除熊猫上的列

时间:2021-03-30 02:29:00

标签: python pandas string dataframe

我正在尝试操作一个列表(类型:字符串)以使用该列表从数据框中删除一些列。 Dataframe

列表来自一个数据框,我创建了一个条件来返回所有值的总和为零的列:

选择 sum = 0 的列

condicao_CO8 = (ex8_centro_oeste.sum(axis = 0) == 0)
condicao_CO8 = condicao_CO8[condicao_CO8 == True]
condicao_CO8.to_csv('D:\Programas\CO_8.csv')

导入数据框并将其转换为列表:

CO8 = pd.read_csv(r'D:\Programas\CO_8.csv',
                 delimiter=','
                 )
CO8.rename(columns={'Unnamed: 0': 'Nulos'}, inplace = True)
CO8.rename(columns={'0': 'Info'}, inplace = True)
CO8.drop(columns = ['Info'], inplace = True)
CO8.columns          

列表中的图片: List

列表中的一些条目:

0                                          ABI - LETRAS
1                                 ADMINISTRAÇÃO PÚBLICA
2                                             AGRONOMIA
3                                             ALIMENTOS
4                                          ARQUIVOLOGIA
5                                  AUTOMAÇÃO INDUSTRIAL
6                                           BIOMEDICINA
7                                         BIOTECNOLOGIA
8                                   CIÊNCIAS - BIOLOGIA
9                                    CIÊNCIAS - QUÍMICA
10                                    CIÊNCIAS AGRÁRIAS
11                                  CIÊNCIAS BIOLÓGICAS
12                    CIÊNCIAS BIOLÓGICAS E CONSERVAÇÃO
13                               CIÊNCIAS DA COMPUTAÇÃO
14                                  CIÊNCIAS ECONÔMICAS 

我的目标是转换列表,以便我可以从中删除列。

将此列表转换为: "ABI - LETRAS", "ADMINISTRAÇÃO PÚBLICA", "AGRONOMIA", "ALIMENTOS", "ARQUIVOLOGIA", "AUTOMAÇÃO INDUSTRIAL"...

为此我做了以下代码(不成功)

list_CO8 = ('\",\" '.join(CO8['Nulos'].apply(str.upper).tolist()))

请问,有人可以帮我吗?

我正在尝试:

list = "ABI - LETRAS", "ADMINISTRAÇÃO PÚBLICA", "AGRONOMIA", "ALIMENTOS", "ARQUIVOLOGIA", "AUTOMAÇÃO INDUSTRIAL"...

制作: ex8_centro_oeste.drop(columns=[list])

数据集链接:Link for Drive (8kb)

1 个答案:

答案 0 :(得分:0)

我现在才正确阅读您的问题。我删除了我之前的回答。如果我没记错的话,您想删除所有总和为零的列。

Option Explicit

Sub unpivotCommaSeparated()
    
    Const sName As String = "Sheet1"
    Const sFirst As String = "A1"
    
    Const dName As String = "Sheet1"
    Const dFirst As String = "D1"
    
    Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
    
    Dim sData As Variant
    Dim rg As Range
    Dim isDataInArray As Boolean
    
    With wb.Worksheets(sName).Range(sFirst)
        Debug.Print "Source First Cell:                " & .Address(0, 0)
        Set rg = .Resize(.Worksheet.Rows.Count - .Row + 1) _
            .Find("*", , xlFormulas, , , xlPrevious)
        If Not rg Is Nothing Then
            Debug.Print "Source Last Cell in First Column: " & rg.Address(0, 0)
            Set rg = .Resize(rg.Row - .Row + 1, 2)
            Debug.Print "Source Range:                     " & rg.Address(0, 0)
            sData = rg.Value
            isDataInArray = True
        End If
    
    End With
    
    If isDataInArray Then
        
        Dim srCount As Long: srCount = UBound(sData, 1)
        Dim cCount As Long: cCount = UBound(sData, 2)
        ReDim Preserve sData(1 To srCount, 1 To cCount + 1)
        
        Dim drCount As Long: drCount = 1
        Dim i As Long
        
        For i = 2 To srCount
            sData(i, 2) = Split(sData(i, 2), ",")
            sData(i, 3) = UBound(sData(i, 2))
            drCount = drCount + sData(i, 3) + 1
        Next i
        
        Dim dData As Variant: ReDim dData(1 To drCount, 1 To cCount)
        Dim j As Long
        
        For j = 1 To cCount
            dData(1, j) = sData(1, j)
        Next j
            
        Dim k As Long: k = 1
        
        For i = 2 To srCount
            For j = 0 To sData(i, 3)
                k = k + 1
                dData(k, 1) = sData(i, 1)
                dData(k, 2) = Application.Trim(sData(i, 2)(j))
            Next j
        Next i
    
        With wb.Worksheets(dName).Range(dFirst).Resize(, cCount)
            Debug.Print "Destination First Row Range:      " & .Address(0, 0)
            Set rg = .Resize(k)
            Debug.Print "Destination Range:                " & rg.Address(0, 0)
            rg.Value = dData
            Set rg = .Resize(.Worksheet.Rows.Count - .Row - k + 1).Offset(k)
            Debug.Print "Clear Range:                      " & rg.Address(0, 0)
            rg.ClearContents
        End With
    
    End If
    
End Sub