python - 使用熊猫按列号拆分值
问题描述
我正在尝试使用 pandas 使用 python 从 html 表中抓取数据。这些表在 url 上,所以我创建了一个列表
每个表在特定列的某些单元格上都有两个值。我设法读取所有数据,打印它们并将它们保存在 csv 文件中。这就是我这样做的方式。到目前为止我的代码是
# -*- coding: utf-8 -*-
import pandas as pd
urls = ["https://url?date=2020-12-31", "https://url?date=2020-12-30", "https://url?date=2020-12-29"]
df = pd.DataFrame(urls)
for url in urls:
df = pd.read_html(url, parse_dates=True)
print(df[0])
df[0].to_csv('file.csv', encoding='utf-8', mode='a', header=False, index=False)
print ("Data have been extracted successfully")
在输出中,一些单元格的两个值出现在一行中,例如 € 14,720 55.3%。如您所见,我在同一行上有一个金额和一个百分比,以及一些带有 NaN 的空列。我想用第二个空格将金额与百分比分开,并将百分比转移到旁边的新列(百分比)中。我正在尝试使用 str.split,但我收到“数据框对象没有属性列表”的错误消息。还有其他方法我尝试我得到相同的错误,Dataframe 对象没有属性.....我将 urls 列表转换为 Dataframe
df = pd.DataFrame(urls)
但我仍然不明白这是否是转换的方式,因为它一直给我错误。
另外,当我尝试删除空列时
df.drop(df.columns[[0,1]], axis=1)
AttributeError: 'list' 对象没有属性 'drop'
我得到同样的信息。
所以,有两件事。我如何用第二个空格分隔特定列的值并将它们放在下一个新列中,然后如果我可以删除空列会很酷。按列号或空单元格。
谢谢
解决方案
我设法用这段代码解决了这个问题。感谢您的任何帮助..
# -*- coding: utf-8 -*-
import pandas as pd
#DATAFRAME AS OBJECT
df = pd.DataFrame()
urls = ["urllink"]
for url in urls:
#READ URLS
df = pd.read_html(url, parse_dates=True)
df = df[0]
#SPLIT COLUMN ON 2nd SPACE AND CREATE 2 NEW COLUMNS WITH € AND %
new1 = df["1"].str.split(" ", n = 2, expand = True)
df["1 ΣΕ €"]= new1[1]
df["1 ΣΕ %"]= new1[2]
newX = df["Χ"].str.split(" ", n = 2, expand = True)
df["Χ ΣΕ €"]= newX[1]
df["Χ ΣΕ %"]= newX[2]
new2 = df["2"].str.split(" ", n = 2, expand = True)
df["2 ΣΕ €"]= new2[1]
df["2 ΣΕ %"]= new2[2]
newOVER = df["OVER"].str.split(" ", n = 2, expand = True)
df["OVER ΣΕ €"]= newOVER[1]
df["OVER ΣΕ %"]= newOVER[2]
newUNDER = df["UNDER"].str.split(" ", n = 2, expand = True)
df["UNDER ΣΕ €"]= newUNDER[1]
df["UNDER ΣΕ %"]= newUNDER[2]
#DELETE UNWANTED COLUMNS
df.drop(df.columns[[0,1,2,4,5,7,8,9,10,11]], axis=1, inplace=True)
print(df)
df.to_csv('file.csv', encoding='utf-8', mode='a', header=False, index=False)
推荐阅读
- php - 如何在 laravel 中使用偏移和限制
- tarantool - tarantool 中有排序集功能吗?
- php - 如何使用 array_search 从数组中的多个值中搜索值
- angular - 如何使用新行显示文本区域内的数组项,该行与角度搜索管道一起使用
- c# - 如何避免ocelot下游url中的端口?
- cucumber - 如何使用 Karate JS 进行精确的复杂 JSON API 响应匹配
- java - 当用户在edittext中输入金额时,用金额替换0的最佳方法
- jestjs - 在 IDE 或命令行中运行 E2E 测试
- sql - 使用搜索词“q”从两个相关表中查询搜索
- excel - 在单个 Excel 列中搜索关键字仅返回第一个单元格详细信息