比较来自世界各地的卖家的域名和 IT 服务价格

如何读取文本格式文件 fix width 在 pandas

我刚刚进入自己的手 pandas 我发现如何阅读该文件。 该文件取自数据库 WRDS 并是一个组件列表 SP500 到20世纪60年代。 我检查了文件,无论我该如何将其导入 'read_csv', 我仍然无法正确显示数据。


df = read_csv/'sp500-sb.txt'/

df

<class 'pandas.core.frame.dataframe'="">
Int64Index: 1231 entries, 0 to 1230
Data columns: gvkeyx      from      thru     conm
                                        gvkey      co_conm
.../the column names/
dtypes: object/1/


输出片段是什么意思? 什么都是有用的
</class>
已邀请:

莫问

赞同来自:

pandas.read_fwf//

五加入 pandas 0.7.3 /
https://github.com/pandas-dev/pandas/pull/952
当年/ 用于处理固定宽度文件。

https://pandas.pydata.org/pand ... .html

https://coderoad.ru/27416031/

董宝中

赞同来自:

WES回答了我 email. 杂散。

这个文件 fixed-width-format /不用逗号或标签分开
通常/. 我明白那个 pandas 没有这样的固定宽度读取器
R 虽然它可以很容易地切出来。 我会看到你能做什么
去做。 同时,如果您可以以另一种格式导出数据 /例如,
CSV - 真的通过逗号/ 你可以用它来阅读 read_csv. 一世
我怀疑有一些魔法 unix 你可以转动文件 FWF 在
文件 CSV.

我建议看问题 github, 自电子邮件是关于
从我的邮箱中消失 :/

https://github.com/pydata/pandas/issues/920
最好的东西,
w

奔跑吧少年

赞同来自:

用户,如果您现在需要处理固定格式,可以使用以下内容:


def fixed_width_to_items/filename, fields, first_column_is_index=False, ignore_first_rows=0/:
reader = open/filename, 'r'/
# skip first rows
for i in xrange/ignore_first_rows/:
reader.next//
if first_column_is_index:
index = slice/0, fields[1]/
fields = [slice/*x/ for x in zip/fields[1:-1], fields[2:]/]
return //line[index], [line[x].strip// for x in fields]/ for line in reader/
else:
fields = [slice/*x/ for x in zip/fields[:-1], fields[1:]/]
return //i, [line[x].strip// for x in fields]/ for i,line in enumerate/reader//


这是一个测试程序:


import pandas
import numpy
import tempfile

# create a data frame
df = pandas.DataFrame/numpy.random.randn/100, 5//
file_ = tempfile.NamedTemporaryFile/delete=True/
file_.write/df.to_string///
file_.flush//

# specify fields
fields = [0, 3, 12, 22, 32, 42, 52]
df2 = pandas.DataFrame.from_items/ fixed_width_to_items/file_.name, fields, first_column_is_index=True, ignore_first_rows=1/ /.T

# need to specify the datatypes, otherwise everything is a string
df2 = pandas.DataFrame/df2, dtype=float/
df2.index = [int/x/ for x in df2.index]

# check
assert /df - df2/.abs//.max//.max// < 1E-6


如果您现在需要它,它应该提出诀窍,但请记住,上述功能非常简单,特别是它与数据类型没有任何作用。

知食

赞同来自:

你的演示是什么意思? 不是
df['gvkey']

不给您列中的数据 gvkey?

如果在控制台上打印整个数据帧,请查看
df.to_string//

, 但如果您有太多列,难以阅读。 Pandas 如果您有太多列,则不会默认打印所有此项:


import pandas
import numpy

df1 = pandas.DataFrame/numpy.random.randn/10, 3/, columns=['col%d' % d for d in range/3/] /
df2 = pandas.DataFrame/numpy.random.randn/10, 30/, columns=['col%d' % d for d in range/30/] /

print df1 # <--- substitute by df2 to see the difference
print
print df1['col1']
print
print df1.to_string//

要回复问题请先登录注册