[英]python loadtxt to read delimited file
我只是从Matlab切换到Python,想学习如何使用numpy
包中的loadtxt
在Python中读取此文件。 (我在Matlab
使用textscan
来读取它)
"07220S006","14/01/12 01:59:50",10,"0"
"07220S006","14/01/12 02:00:00",10,"0"
"07220S006","14/01/12 02:00:10",10,"0"
我可以使用Python正则表达式包中的split
函数读取此文件,但是,鉴于我的数据包含大约数十万行这样的内容,因此将split
函数应用于每一行将导致大量的分析时间。 因此,我认为loadtxt
在这种情况下会做得更好。 我已经找到了许多读取相似文件的解决方案,但是该文件比那些示例要复杂得多,我也不知道如何读取它。
任何帮助和建议表示赞赏
您可以使用pandas
轻松实现,然后如果需要numpy
数组,则可以访问values
:
import pandas as pd
from io import StringIO
data = """
"07220S006","14/01/12 01:59:50",10,"0"
"07220S006","14/01/12 02:00:00",10,"0"
"07220S006","14/01/12 02:00:10",10,"0"
"""
df = pd.read_csv(StringIO(data), header=None)
print(df)
0 1 2 3
0 07220S006 14/01/12 01:59:50 10 0
1 07220S006 14/01/12 02:00:00 10 0
2 07220S006 14/01/12 02:00:10 10 0
print(df.values)
array([['07220S006', '14/01/12 01:59:50', 10, 0],
['07220S006', '14/01/12 02:00:00', 10, 0],
['07220S006', '14/01/12 02:00:10', 10, 0]], dtype=object)
编辑
想要将日期列拆分为日期和时间(或年份,月份等)的pd.to_datetime
/您可以先使用pd.to_datetime
将列转换为datetime
对象,然后使用dt
访问具有datetime
字段并将其写入新列:
date_col = pd.to_datetime(df[1])
date_col.dt.year
print(date_col.dt.year)
0 2012
1 2012
2 2012
Name: 1, dtype: int64
或者,如果需要使用dt.strftime
,则可以将其转换为字符串,例如:
print(date_col.dt.strftime("%Y/%m %H:%M"))
0 2012/01 01:59
1 2012/01 02:00
2 2012/01 02:00
Name: 1, dtype: object
您可以通过以下方式非常简单地创建:
df['year'] = date_col.dt.year
print(df)
0 1 2 3 year
0 07220S006 14/01/12 01:59:50 10 0 2012
1 07220S006 14/01/12 02:00:00 10 0 2012
2 07220S006 14/01/12 02:00:10 10 0 2012
将引号中的任何值都视为字符串,并改用numpy.genfromtxt(更好地处理缺失值):
import numpy as np
from StringIO import String IO
example_data = '"07220S006","14/01/12 01:59:50",10,"0"\n"07220S006","14/01/12 02:00:00",10,"0"\n"07220S006","14/01/12 02:00:10",10,"0"'
# approximation of your input data
data = np.genfromtxt(StringIO(example_data), delimiter=',', dtype='S16,S16,i4,S3')
# dtypes: Sx - x char string, i4 - 32 bit integer
# more here: http://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html
print data
[('"07220S006"', '"14/01/12 01:59:50"', 10, '"0"')
('"07220S006"', '"14/01/12 02:00:00"', 10, '"0"')
('"07220S006"', '"14/01/12 02:00:10"', 10, '"0"')]
不能想到一种使用numpy删除引号的简单方法,我认为如上一篇文章中使用pandas可能是更好的解决方案或python CSVReader
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.