簡體   English   中英

有沒有更好的方法可以循環for循環中的多個未知變量?

[英]Is there a better way to loop over multiple unknown variables in a for loop?

因此,我有要在其中打印到文本文件的任務。 該文件包括標頭信息和具有特定名稱的數據列。 這是代碼:

import numpy as np

data={'dpr_NS_corZFac': [np.nan, np.nan, 35.736231803894043, 36.331412792205811,
               35.694644451141357, 36.576189994812012, 37.236752510070801,
               38.173699378967285, 38.808069229125977, 36.761274337768555,
               30.194313526153564],
    'dpr_HS_corZFac': [np.nan, 38.550984859466553, 37.893826961517334, 40.246520042419434,
             39.204437732696533, 37.227160930633545, 37.364296913146973,
             40.320019721984863, 39.04454231262207, 33.014707565307617,
             27.193448543548584],
    'npol':[np.nan, np.nan, 35.736231803894043, 36.331412792205811,
               35.694644451141357, 36.576189994812012, 37.236752510070801,
               38.173699378967285, 38.808069229125977, 36.761274337768555,
               30.194313526153564] }

datafile_path = '/home/cpabla/data/pandastext.txt'

with open(datafile_path, 'w+') as f:
    f.write('Charanjit is writing this text file.')
    f.write('\t'*4)
    f.write('He continues to write....\n')
    for tag in data:
        f.write('{}\t\t'.format(tag))
    f.write('\n')
    for val1, val2, val3 in zip(data['dpr_NS_corZFac'], data['dpr_HS_corZFac'], data['npol']):
        if np.isnan(val1): val1 = 99.99
        if np.isnan(val2): val2 = 99.99
        if np.isnan(val3): val3 = 99.99
        f.write('{:.2f}'.format(val1))
        f.write('\t'*7)
        f.write('{:.2f}'.format(val2))
        f.write('\t'*7)
        f.write('{:.2f}'.format(val3))
        f.write('\t'*7)
        f.write('\n')

代碼的細節並不重要,因為這僅僅是為了我的測試。 注意我如何有一個列表字典。 在字典中,列表的數量將是未知的,並且我想生成示例輸出中給定的的文本文件。 但是,請注意我如何遍歷多個變量(在本例中為字典中的列表)。 我顯然很想自動執行此操作,因此不必繼續向for循環添加變量。 那么,有沒有更好的方法呢?

這是輸出:

Charanjit is writing this text file.                He continues to write....
dpr_HS_corZFac      dpr_NS_corZFac      npol
99.99                           99.99                           99.99
99.99                           38.55                           99.99
35.74                           37.89                           35.74
36.33                           40.25                           36.33
35.69                           39.20                           35.69
36.58                           37.23                           36.58
37.24                           37.36                           37.24
38.17                           40.32                           38.17
38.81                           39.04                           38.81
36.76                           33.01                           36.76
30.19                           27.19                           30.19

但是,文本編輯器的實際輸出卻不是這樣。 每列都在其自己的標題名稱下,這正是我想要的名稱。 輸出只是為了向您展示我正在嘗試做的事情。

一種解決方案可能是:

for k in data.keys():
    for val in data[k] :
        if np.isnan(val): val = 99.99
            f.write('{:.2f}'.format(val))
            f.write('\t'*7)
        f.write('\n')

編輯:您是對的Akasolace,我已經編輯了我的代碼

import numpy as np 

data={'dpr_NS_corZFac': [np.nan, np.nan, 35.736231803894043, 36.331412792205811, 
               35.694644451141357, 36.576189994812012, 37.236752510070801, 
               38.173699378967285, 38.808069229125977, 36.761274337768555, 
               30.194313526153564],
    'dpr_HS_corZFac': [np.nan, 38.550984859466553, 37.893826961517334, 40.246520042419434, 
             39.204437732696533, 37.227160930633545, 37.364296913146973, 
             40.320019721984863, 39.04454231262207, 33.014707565307617, 
             27.193448543548584],
    'npol':[np.nan, np.nan, 35.736231803894043, 36.331412792205811, 
               35.694644451141357, 36.576189994812012, 37.236752510070801, 
               38.173699378967285, 38.808069229125977, 36.761274337768555, 
               30.194313526153564] }

datafile_path = r'D:\TEMP\pandastext.txt'

with open(datafile_path, 'w+') as f:
    f.write('Charanjit is writing this text file.')
    f.write('\t'*4)
    f.write('He continues to write....\n')
    for tag in data:
        f.write('{}\t\t'.format(tag))
    f.write('\n')
    for vals in zip(data['dpr_NS_corZFac'], data['dpr_HS_corZFac'], data['npol']):
        for val in vals:
            if np.isnan(val): val = 99.99
            f.write('{:.2f}'.format(val))
            f.write('\t'*7)
        f.write('\n')

可以用熊貓嗎?

這里:

In [50]: import pandas as pd

In [48]: pd.set_option('precision', 2)

In [51]: df = pd.DataFrame(data)

In [52]: df
Out[52]:
    dpr_HS_corZFac  dpr_NS_corZFac   npol
0              NaN             NaN    NaN
1            38.55             NaN    NaN
2            37.89           35.74  35.74
3            40.25           36.33  36.33
4            39.20           35.69  35.69
5            37.23           36.58  36.58
6            37.36           37.24  37.24
7            40.32           38.17  38.17
8            39.04           38.81  38.81
9            33.01           36.76  36.76
10           27.19           30.19  30.19


In [56]: df.replace(np.NaN, 99.99, inplace=True)

In [57]: print df.to_string()
    dpr_HS_corZFac  dpr_NS_corZFac   npol
0            99.99           99.99  99.99
1            38.55           99.99  99.99
2            37.89           35.74  35.74
3            40.25           36.33  36.33
4            39.20           35.69  35.69
5            37.23           36.58  36.58
6            37.36           37.24  37.24
7            40.32           38.17  38.17
8            39.04           38.81  38.81
9            33.01           36.76  36.76
10           27.19           30.19  30.19

In [58]:

寫入文件(完整)

In [59]: with open(r'C:\temp\data.txt', 'w') as f:
             f.write("Whatever you want here")
    ...:     f.write(df.to_string(index=False))
    ...:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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