python,爬虫,pandas的DataFrame处理后的数据,输出到文本后中间这些数据都没有展开怎么办
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python,爬虫,pandas的DataFrame处理后的数据,输出到文本后中间这些数据都没有展开怎么办相关的知识,希望对你有一定的参考价值。
爬虫+pandas这个组合我还是头一次见。 据我所知pandas是专门用来处理数学问题的,虽然也提供了一些字符串相关的函数,但毕竟能力有限,建议换一个方式吧,比如数据库来储存会比较好。但还是要帮你解决你现在的这个问题才行。
图片的那个情况是不是用print函数直接输出在控制台上了,然后手动复制到文本文件里的?
如果是的话,那肯定不会显示全的。 如果想显示全的话,且数据量少的情况下(100个以内),可以用遍历的方法,遍历的时候print每行的数据。
或者直接用to_csv或者to_excel方法输出到文件里面。 参考技术A 爬虫不是scrapy+bs4吗,第一次看到用pandas做后处理的。 参考技术B pd.set_option('display.max_rows', None)#print时显示最大行数
加上这句就行了
Python Pandas 数据框创建
【中文标题】Python Pandas 数据框创建【英文标题】:Python Pandas Data frame creation 【发布时间】:2018-03-15 16:57:31 【问题描述】:我尝试使用以下代码创建数据框 df:
import numpy as np
import pandas as pd
index = [0,1,2,3,4,5]
s = pd.Series([1,2,3,4,5,6],index= index)
t = pd.Series([2,4,6,8,10,12],index= index)
df = pd.DataFrame(s,columns = ["MUL1"])
df["MUL2"] =t
print df
MUL1 MUL2
0 1 2
1 2 4
2 3 6
3 4 8
4 5 10
5 6 12
在尝试使用以下语法创建相同的数据框时,我得到了一个奇怪的输出。
df = pd.DataFrame([s,t],columns = ["MUL1","MUL2"])
print df
MUL1 MUL2
0 NaN NaN
1 NaN NaN
请解释为什么当两个系列都非空时 NaN 会显示在数据框中,以及为什么只显示两行而没有其他行。
还通过使用 pandas DataFrame 方法中的 columns 参数,提供创建数据框的正确方法,就像上面提到的一样。
【问题讨论】:
【参考方案1】:正确的方法之一是将输入列表中的数组数据堆叠成列 -
In [161]: pd.DataFrame(np.c_[s,t],columns = ["MUL1","MUL2"])
Out[161]:
MUL1 MUL2
0 1 2
1 2 4
2 3 6
3 4 8
4 5 10
5 6 12
在幕后,堆叠创建了一个二维数组,然后将其转换为数据帧。这是堆叠数组的样子 -
In [162]: np.c_[s,t]
Out[162]:
array([[ 1, 2],
[ 2, 4],
[ 3, 6],
[ 4, 8],
[ 5, 10],
[ 6, 12]])
【讨论】:
非常感谢您的回答先生。但我有一个小问题。使用的系列 s 和 t 是可以通过打印其中之一来确定的列,例如打印 0 1 1 2 2 3 3 4 4 5 5 6 数据类型:int64。那么为什么我们必须明确使用 np.c_ 将它们转换为列? @SarvagyaDubeys
和 t
是 pandas 系列,很可能它们的索引在使用 [s,t]
创建数据框时会搞砸。通过堆叠,它为我们提供了数组数据,因为我们正在摆脱这些索引。这有助于我们获得与其先前索引信息无关的所需数据框。
嗯。我认为如果输入是系列不是很好的方法转换为 numpy 数组,因为丢失了index
信息。特别是如果每个系列都有不同的索引,您的解决方案就会失败。你怎么看?
您的解决方案仅在默认索引或与pd.DataFrame(np.c_[s,t],columns = ["MUL1","MUL2"], index=s.index)
相同的情况下才有效
@jezrael 我认为 OP 希望从 s
和 t
获取与索引信息无关的数据以创建输出数据帧。如果他们需要处理这种情况/预期输出的情况,我会让 OP 澄清一下。【参考方案2】:
如果删除列参数得到:
df = pd.DataFrame([s,t])
print (df)
0 1 2 3 4 5
0 1 2 3 4 5 6
1 2 4 6 8 10 12
然后定义列 - 如果列不存在,则获取 NaNs 列:
df = pd.DataFrame([s,t], columns=[0,'MUL2'])
print (df)
0 MUL2
0 1.0 NaN
1 2.0 NaN
最好使用dictionary
:
df = pd.DataFrame('MUL1':s,'MUL2':t)
print (df)
MUL1 MUL2
0 1 2
1 2 4
2 3 6
3 4 8
4 5 10
5 6 12
如果需要更改列顺序添加列参数:
df = pd.DataFrame('MUL1':s,'MUL2':t, columns=['MUL2','MUL1'])
print (df)
MUL2 MUL1
0 2 1
1 4 2
2 6 3
3 8 4
4 10 5
5 12 6
更多信息在dataframe documentation。
不需要concat
- DataFrame
构造函数的另一个解决方案:
df = pd.concat([s,t], axis=1, keys=['MUL1','MUL2'])
print (df)
MUL1 MUL2
0 1 2
1 2 4
2 3 6
3 4 8
4 5 10
5 6 12
【讨论】:
我打算在不使用字典的情况下创建数据框。 我添加了另一个解决方案 - 不需要 DataFrame 构造函数。 非常感谢您的帮助 @jezrael 谢谢伙计,你是个救命稻草,有这么多有用的答案:)【参考方案3】:pandas.DataFrame 接受参数 data,其类型可以是 ndarray、iterable、dict 或 dataframe。 如果您传入一个列表,它将假定每个成员都是一行。示例:
a = [1,2,3]
b = [2,4,6]
df = pd.DataFrame([a, b], columns = ["Col1","Col2", "Col3"])
# output 1:
Col1 Col2 Col3
0 1 2 3
1 2 4 6
你得到NaN
,因为它期望index = [0,1]
,但你给[0,1,2,3,4,5]
要得到你想要的形状,先转置数据:
data = np.array([a, b]).transpose()
如何创建 pandas 数据框
import pandas as pd
a = [1,2,3]
b = [2,4,6]
df = pd.DataFrame(dict(Col1=a, Col2=b))
输出:
Col1 Col2
0 1 2
1 2 4
2 3 6
【讨论】:
以上是关于python,爬虫,pandas的DataFrame处理后的数据,输出到文本后中间这些数据都没有展开怎么办的主要内容,如果未能解决你的问题,请参考以下文章
pandas一些基本操作(DataFram和Series)_4