KcF*_*nMi 7 python dataframe pandas
如何使用Pandas读取以下(两列)数据(来自.dat文件)
TIME XGSM
2004 006 01 00 01 37 600 1
2004 006 01 00 02 32 800 5
2004 006 01 00 03 28 000 8
2004 006 01 00 04 23 200 11
2004 006 01 00 05 18 400 17
Run Code Online (Sandbox Code Playgroud)
列分隔符是(至少)2个空格.
我试过了
df = pd.read_table("test.dat", sep="\s+", usecols=['TIME', 'XGSM'])
print df
Run Code Online (Sandbox Code Playgroud)
但它打印
TIME XGSM
2004 6
2004 6
2004 6
2004 6
2004 6
Run Code Online (Sandbox Code Playgroud)
您可以使用带有列顺序的参数 usecols:
import pandas as pd
from pandas.compat import StringIO
temp=u"""TIME XGSM
2004 006 01 00 01 37 600 1
2004 006 01 00 02 32 800 5
2004 006 01 00 03 28 000 8
2004 006 01 00 04 23 200 11
2004 006 01 00 05 18 400 17"""
#after testing replace StringIO(temp) to filename
df = pd.read_csv(StringIO(temp),
sep="\s+",
skiprows=1,
usecols=[0,7],
names=['TIME','XGSM'])
print (df)
TIME XGSM
0 2004 1
1 2004 5
2 2004 8
3 2004 11
4 2004 17
Run Code Online (Sandbox Code Playgroud)
编辑:
您可以使用分隔符regex- 2 个或更多空格,然后添加engine='python'因为警告:
ParserWarning:回退到 'python' 引擎,因为 'c' 引擎不支持正则表达式分隔符(分隔符 > 1 个字符且不同于 '\s+' 被解释为正则表达式);您可以通过指定 engine='python' 来避免此警告。
import pandas as pd
from pandas.compat import StringIO
temp=u"""TIME XGSM
2004 006 01 00 01 37 600 1
2004 006 01 00 02 32 800 5
2004 006 01 00 03 28 000 8
2004 006 01 00 04 23 200 11
2004 006 01 00 05 18 400 17"""
#after testing replace StringIO(temp) to filename
df = pd.read_csv(StringIO(temp), sep=r'\s{2,}', engine='python')
print (df)
TIME XGSM
0 2004 006 01 00 01 37 600 1
1 2004 006 01 00 02 32 800 5
2 2004 006 01 00 03 28 000 8
3 2004 006 01 00 04 23 200 11
4 2004 006 01 00 05 18 400 17
Run Code Online (Sandbox Code Playgroud)
也可以尝试pd.read_fwf()(将固定宽度格式化的行表读入DataFrame):
import pandas as pd
from io import StringIO
pd.read_fwf(StringIO("""TIME XGSM
2004 006 01 00 01 37 600 1
2004 006 01 00 02 32 800 5
2004 006 01 00 03 28 000 8
2004 006 01 00 04 23 200 11
2004 006 01 00 05 18 400 17"""), usecols = ["TIME", "XGSM"])
# TIME XGSM
#0 2004 1
#1 2004 5
#2 2004 8
#3 2004 11
#4 2004 17
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30864 次 |
| 最近记录: |