我一直在进行文本抓取,只是使用循环将文本写入CSV文件。例如(跳过大量代码 - 这只是为了说明):
for i in range(0,numresults):
a2 = soup.find_all('td')[0].string
a3 = soup.find_all('td')[1].string
file.write(str(i) + '|' + a2 + '|' + a3 + '\n')
然后我可以用R。
之类的东西打开这个CSV文件但是,我想说我想在python中创建一个矩阵。首先,当使用包含大量文本的数据时,最好使用pandas或NumPy吗?
其次,我如何修改代码以不写入文件,而是创建pandas和NumPy数组?
让我们说文本最终是:
a11 = 1; a12 = 'a'; a13 = 'Text1'
a21 = 2; a22 = 'B'; a23 = 'Text2'
a31 = 3; a32 = 'c'; a33 = 'Text3'
a41 = 4; a42 = 'D'; a44 = 'Text4'
import numpy as np
import pandas
最后,我如何将生成的pandas和NumPy矩阵写入CSV文件?
答案 0 :(得分:1)
您似乎正在使用BeautifulSoup从HTML获取表格。我已成功使用Pandas从网页中提取表格。使用pandas doc中的示例(这里是link):
In [1]: import pandas as pd
In [2]: tables = pd.read_html('http://www.fdic.gov/bank/individual/failed/banklist.html')
在这种情况下,tables
只有一个表。您可以print tables[0]
查看或tables[0].to_csv(local_csv_output)
保存为CSV文件。
pd.read_html
可以读取URL(http ...)和本地HTML文件。
如果你有多个表,只需通过打印手动找出你需要的表。
尝试一下,让我们知道。
如果您已经分配了变量a11,a11,...
(这看起来很奇怪 - 它们应该在list
中),那么您可以创建pandas DataFrame:
In [38]: df = pd.DataFrame ([[a11,a12,a13],
[a21,a22,a23],
[a31,a32,a33],
[a41,a42,a44]],
columns=['Col1','Col2','Col3'])
In [39]: df
Out[39]:
Col1 Col2 Col3
0 1 a Text1
1 2 B Text2
2 3 c Text3
3 4 D Text4
df.to_csv('output_csv_file.csv')
会将其保存到csv。