我正在尝试操作一个列表(类型:字符串)以使用该列表从数据框中删除一些列。 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)
答案 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