我试着学习如何从for循环构建和填充pandas数据帧?但我似乎无法将我的价值观写入我的专栏。
最终,我从一个网页中获取数据,并希望将其放入一个数据框中。
我的标题预定义为:
d1 = pd.DataFrame(columns=['col1', 'col2', 'col3', 'col4', 'col5', 'col6', 'col7', 'col8', 'col9',
'col10', 'col11', 'col12', 'col13', 'col14', 'col15', 'col16', 'col17'])
现在我有了在for循环中得到的值,如何将这些行写入每一列,然后重复到第1列到第17列,再重复到下一行?
row = soup.find_all('td', attrs = {'class': 'Table__TD'})
for data in row:
print(data.get_text())
示例输出行1
Mon 11/11
SA
100
31
3-5
60.0
1-3
33.3
1-2
50.0
10
4
0
1
1
2
8
示例输出第2行
Wed 11/13
@CHA
W119-117
32
1-5
20.0
1-5
20.0
0-0
0.0
3
1
0
1
3
3
3
预期产量
任何帮助都将不胜感激。
将数据附加到现有数据帧的速度非常慢。
您最好从soup
创建一个数据列表,创建一个新的数据框,然后将新的数据框合并到旧的数据框中
这是一个快速基准测试,对每个案例使用空的df
。在您的实际代码中,df
应该是您现有的数据帧:
# setup some sample data
headers = ['col1', 'col2', 'col3', 'col4', 'col5', 'col6', 'col7',
'col8', 'col9', 'col10', 'col11', 'col12', 'col13', 'col14',
'col15', 'col16', 'col17']
raw_data = 'Mon 11/11,SA,100,31,3-5,60.0,1-3,33.3,1-2,50.0,10,4,0,1,1,2,8'.split(",")
row_dict_data = dict(zip(headers, raw_data))
# append
%%time
df = pd.DataFrame(columns=headers)
for i in range(100):
df = df.append([row_dict_data])
# CPU times: user 258 ms, sys: 4.82 ms, total: 263 ms
# Wall time: 261 ms
# new dataframe
%%time
df = pd.DataFrame(columns=headers)
df2 = pd.DataFrame([raw_data for i in range(100)], columns=headers)
df3 = pd.concat([df, df2], sort=False)
# CPU times: user 7.03 ms, sys: 1.16 ms, total: 8.2 ms
# Wall time: 7.19 ms
首先,我们有列名称列表:
cols = ['col1', 'col2', 'col3', 'col4', 'col5', 'col6', 'col7', 'col8', 'col9',
'col10', 'col11', 'col12', 'col13', 'col14', 'col15', 'col16', 'col17']
然后列出值:
row = [x.get_text() for x in soup.find_all('td', attrs = {'class': 'Table__TD'})]
print(row)
# ['Mon 11/11', 'SA', '100', '31', '3-5', '60.0', '1-3', '33.3', '1-2', '50.0', '10', '4', '0', '1', '1', '2', '8']
然后我们可以将列和值压缩在一起,然后附加到数据帧:
d1 = d1.append(dict(zip(cols, row)), ignore_index=True)
print(d1)
# col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12 \
# 0 Mon 11/11 SA 100 31 3-5 60.0 1-3 33.3 1-2 50.0 10 4
#
# col13 col14 col15 col16 col17
# 0 0 1 1 2 8
你可以试试这个,
import pandas as pd
columns = [
'col1',
'col2',
'col3',
'col4',
'col5',
'col6',
'col7',
'col8',
'col9',
'col10',
'col11',
'col12',
'col13',
'col14',
'col15',
'col16',
'col17',
]
# create dataframe
d1 = pd.DataFrame(columns=columns)
full = []
for data in soup.find_all('td', attrs={'class': 'Table__TD'}):
full.append(data.get_text())
# seperate full list into sub-lists with 17 elements
rows = [full[i: i+17] for i in range(0, len(full), 17)]
# append list of lists structure to dataframe
d1 = d1.append(pd.DataFrame(rows, columns=d1.columns))
我是不是误解了什么?据我所知,Julia中的Dataframes与R中的Dataframes的工作方式不同,但我无法全神贯注于如何使其工作。
我试图对文本进行实体分析,我想把结果放在数据框中。目前,结果不存储在字典中,也不存储在数据框中。结果用两个函数提取。 df: 我有以下代码: 该代码给出了以下结果: 我已经在函数中创建了和一个数据框。这个线程解释了在循环中附加到数据帧是没有效率的。我不知道如何以有效的方式填充数据框。这些线程与我的问题相关,但它们解释了如何从存量数据填充数据框。当我尝试使用并返回时,我得到一个错误: 在entity
我对JAVA非常陌生,我需要帮助获得某种嵌套循环,我认为这是一个用户输入,并将输入放入数组中。还有一个哨兵-1。我知道为别人做作业是不受欢迎的,而这根本不是我所要求的。我希望有人能帮我解释一下,而不是帮我写代码。我刚开始需要帮助。我搞不懂这个节目的第一部分: 我必须使用[4][5]的2D数组,其中4是销售人员的数量,5是他们销售的产品的数量。我必须向用户询问人名(1-4),然后再询问已售出的产品(
我在NetBeans IDE中工作,语言是Java,主要的类是JFrame Form。 我需要从Jtable获取所有数据并用这些数据填充数组。数组代表矩阵。 代码如下 我有一个错误 线程“AWT-EventQueue-0”java.lang.ClassCastException:java.lang.String无法转换为java.lang.Double 所以将表中的元素设置为双精度不是那么容易吗?
series(string $value,[ string $categories]) string $value $config = ['path' => './tests']; $fileObject = new \Vtiful\Kernel\Excel($config); $fileObject = $fileObject->fileName('tutorial.xlsx'); $
factory 辅助函数 必须 使用 factory 方法来做数据填充,因为是框架提倡的,并且可以同时为测试代码服务。 运行效率 开发数据填充时,必须 特别注意 php artisan db:seed 的运行效率,否则随着项目的代码量越来越大,db:seed 的运行时间会变得越来越长,有些项目多达几分钟甚至几十分钟。 原则是: Keep it lighting speed. 只有当 db:seed