我在文件中有以下方式的数据行:
0100234567 1234567 0000603842000000000000ABCDE JOHN J 01F19660129 2PO BOX 999
我已经将文件中的所有行输入到 pandas 数据框中。现在我需要做的是根据字符的位置,我需要分离出特定的列。在 Hive 中,我可以做一个子字符串和输出列,但在 pandas dataframe 中我做不到。
例如:在 Hive 中,NAME
可以是 select substring(100,10) from temp;
100
是此人的 NAME
开始的位置。
我可以使用 pandas 数据框做些什么吗?任何帮助,将不胜感激。我已经尝试过 str.slice,但我认为它更特定于系列而不是数据帧。
最佳答案
我认为您需要 read_fwf
,可以使用参数 colspecs
或继承前 100 行:
df = pd.read_fwf('filename')
对于自定义名称,可以使用:
df = pd.read_fwf('filename', names=list('abcdefghi'))
更好的解释在 Files with Fixed Width Columns 中。
示例:
import pandas as pd
from pandas.compat import StringIO
temp=u"""0100234567 1234567 0000603842000000000000ABCDE JOHN J 01F19660129 2PO BOX 999
0100234567 1234567 0000603842000000000000ABCDE JOHN J 01F19660129 2PO BOX 999
0100234567 1234567 0000603842000000000000ABCDE JOHN J 01F19660129 2PO BOX 999"""
#after testing replace 'StringIO(temp)' to 'filename.csv'
df = pd.read_fwf(StringIO(temp), names=list('abcdefghi'))
print (df)
a b c d e f g \
0 100234567 1234567 0000603842000000000000ABCDE JOHN J 01F19660129 2PO
1 100234567 1234567 0000603842000000000000ABCDE JOHN J 01F19660129 2PO
2 100234567 1234567 0000603842000000000000ABCDE JOHN J 01F19660129 2PO
h i
0 BOX 999
1 BOX 999
2 BOX 999
print (type(df))
<class 'pandas.core.frame.DataFrame'>
但如果只需要位置值,请使用 indexing with .str ,对于 read_csv
需要分隔符,它在 |
或 ¥ 等数据中不是
:not
import pandas as pd
from pandas.compat import StringIO
temp=u"""0100234567 1234567 0000603842000000000000ABCDE JOHN J 01F19660129 2PO BOX 999
0100234567 1234567 0000603842000000000000ABCDE JOHN J 01F19660129 2PO BOX 999
0100234567 1234567 0000603842000000000000ABCDE JOHN J 01F19660129 2PO BOX 999"""
#after testing replace 'StringIO(temp)' to 'filename.csv'
df = pd.read_csv(StringIO(temp), names= ['col'], sep='|')
print (df)
col
0 0100234567 1234567 000060384200000000000...
1 0100234567 1234567 000060384200000000000...
2 0100234567 1234567 000060384200000000000...
df['a'] = df['col'].str[7:10]
df['b'] = df['col'].str[15:20]
df = df.drop('col', axis=1)
print (df)
a b
0 567 34567
1 567 34567
2 567 34567
关于python - Python 中的 Hive 子字符串等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43614675/