![](/img/trans.png)
[英]Find a string in a dataframe and write row to a new dataframe (Pandas, Python 3.4)
[英]Python 2.7 / Pandas: writing new string from each row in dataframe
在熊貓中,我有一個從csv編寫的數據框。 我的最終目標是從該CSV生成XML模式,因為CSV中的每個項目都對應一個模式變量。 唯一的解決方案(我能想到的)是從該數據框中讀取每個項目,以便它生成一個文本文件,數據框中的每個值都由字符串包圍。
TableName Variable Interpretation Col4 Col5
CRASH CRASH_ID integer 1
CRASH SER_NO range 0
CRASH SER_NO code 99999
CRASH CRASH_MO_NO code 1 January
CRASH CRASH_MO_NO code 2 February
這將生成一個文本文件,其結果類似於(以第一行為例):
<table = "CRASH">
<name = "CRASH_ID">
<type = "integer">
<value = "1">
其中<table = >, <name = >
都是字符串。 它們不必專門以這種方式進行格式化(盡管那會很好)-我只需要一種比從CSV文件中手動輸入所有模式更快的方式來生成該模式。
似乎最好的方法是讀取每一行並在將其寫入輸出文件時生成一個字符串。 我已經看過.iterrows()方法,但這不能讓我連接字符串和元組。 我也看過 其他用戶的一些帖子 ,但他們的重點似乎更多地放在計算數據框內的內容或更改數據本身,而不是從每一行生成字符串。
我當前的代碼如下。 我知道熊貓基於Numpy數組,並且在“ for i in df”循環中運行不是一種有效的方法,但是我不確定從哪里開始。
編輯:某些行可能需要循環顯示某種方式。 例如,模式具有多個附加了字符串的值代碼:
<values>
<value code = "01">January</value>
<value code = "02">February</value>
<value code = "03">March</value>
</values>
我在想也許我可以通過“解釋”對價值觀進行分組? 然后,如果他們具有“代碼”解釋,我可以對整個組進行某種迭代,以便顯示所有代碼。
這是我當前的代碼,以供參考。 我對其進行了更新,以反映出蘭迪的出色建議。 我還編輯了以上帖子,以反映一些更新的關注點。
import pandas as pd
text_file = open(r'oregon_output.txt', 'w')
df = pd.read_csv(r'oregon_2013_var_list.csv')
#selects only CRASH variables
crash = df['Col1'] == 'CRASH'
df_crash = df[crash]
#value which will be populated with code values from codebook
code_fill = " "
#replaces NaN values in dataframe wih code_fill
df_crash.fillna(code_fill, inplace = True)
for row_id, row in df.iterrows():
print '<variable>'
for k, v in row.iterkv():
if v is not None:
print '<{} = "{}">'.format(k, v)
print '</variable>'
print
在這種情況下,您可能要考慮一個to_dict()
方法:
In [178]:
df.columns = ['table','name','type','value']
[["<%s='%s'>"%(k,v) for k,v in D.items()] for D in df.to_dict('records')]
Out[178]:
[["<table='CRASH'>", "<type='integer'>", "<name='CRASH_ID'>", "<value='1.0'>"],
["<table='CRASH'>", "<type='range'>", "<name='SER_NO'>", "<value='0.0'>"],
["<table='CRASH'>", "<type='code'>", "<name='SER_NO'>", "<value='99999.0'>"],
["<table='CRASH'>", "<type='string'>", "<name='CRASH_DT'>", "<value='nan'>"]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.