[英]How can I write the following code in a more efficient and pythonic way?
[英]How can I write the following code in a more efficient way in python?
从一个文件中,我解析了我需要的字段并将它们存储在变量中,它看起来像下面这样:
field_list = ['some_value','some_other_value']
raw_data = """sring1|0|2|N.S.|3|
sring2|0|2|N.S.|2|
sring3|0|2|3|5|"""
现在我需要创建一个 df,它看起来像:
Str Measure Value
0 sring1 some_value N.S.
1 sring1 some_other_value 3
2 sring2 some_value N.S.
3 sring2 some_other_value 2
4 sring3 some_value 3
5 sring3 some_other_value 5
这里的逻辑如下:
例如,对于raw_data中的行“sring1|0|2|NS|3|” Str Column 的值为sring1 , Measure Column 的值为some_value (来自field_list ), Value Column 的值为N.S
现在,对于同一个字符串, Str Column 的值将是sring1 , Measure Column 的值将是some_other_value , Value Column 的值将是3 。
|2| 在字符串“sring1|0|2|NS|3|”中告诉我们会有多少行,最后两行是field_list的值
目前我有以下代码:
field_list = ['some_value','some_other_value']
db_columns = ['Str','Measure','Value']
raw_data = """sring1|0|2|N.S.|3|
sring2|0|2|N.S.|2|
sring3|0|2|3|5|"""
entry_list = raw_data.splitlines()
final_db_list =[]
for entries in entry_list:
each_entry_list = entries.split('|')
security = each_entry_list[0].strip()
print(each_entry_list)
no_of_fields = int(each_entry_list[2])
db_list=[]
upload_list=[]
for i in range (0,no_of_fields):
field = field_list[i]
value = each_entry_list[3+i]
db_list=[security,field,value]
upload_list.append(db_list)
final_db_list.append(upload_list)
flatList = [ item for elem in final_db_list for item in elem]
df = DataFrame(flatList,columns=db_columns)
print(df)
有人可以用更好的方法帮助我吗? 我有的那个可以用,但是太乱了。 需要对它进行一些 Python 化处理,但我没有主意了。 请帮忙!
我们可以这样做:
import pandas as pd
from io import StringIO
field_list = ['some_value','some_other_value']
raw_data = """sring1|0|2|N.S.|3|
sring2|0|2|N.S.|2|
sring3|0|2|3|5|"""
df = pd.read_csv(StringIO(raw_data), sep='|', header=None)
df = df.drop(5, axis=1)
df = (df.set_index([0,1,2])
.set_axis(field_list, axis=1)
.reset_index(level=[1,2], drop=True)
.stack()
.rename('Value')
.rename_axis(['Str', 'Measure'])
.reset_index()
)
print(df)
Output:
Str Measure Value
0 sring1 some_value N.S.
1 sring1 some_other_value 3
2 sring2 some_value N.S.
3 sring2 some_other_value 2
4 sring3 some_value 3
5 sring3 some_other_value 5
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.