簡體   English   中英

python loadtxt讀取分隔的文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM