【发布时间】:2015-11-14 13:55:23
【问题描述】:
在 Pandas 中,我有一个从 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() 方法,但这并不能让我连接字符串和元组。我也有looked 来自other 用户的一些posts,但他们的重点似乎更多地放在计算数据帧中的内容或更改数据本身,而不是从每一行生成一个字符串。
我当前的代码如下。我知道 pandas 基于 Numpy 数组,并且运行“for i in df”循环不是一种有效的方法,但我不确定从哪里开始。
编辑:某些行可能需要循环显示以某种方式。例如,模式有多个附加字符串的值代码:
<values>
<value code = "01">January</value>
<value code = "02">February</value>
<value code = "03">March</value>
</values>
我在想也许我可以通过“解释”对价值观进行分组?然后,如果他们有“代码”解释,我可以对组进行某种迭代,以便显示所有代码。
这是我目前的代码,供参考。我已对其进行了更新,以反映 Randy 在下面的出色建议。我还编辑了上面的帖子以反映一些更新的问题。
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
【问题讨论】:
-
有点。但是,我的架构有稍微不同的需求——我在我的问题上添加了更多内容以扩展它。另外,我不完全理解该问题的答案,并且我不想破坏该线程,因为它是在两年前发布的......谢谢您的回复,但它仍然很有帮助!
标签: python python-2.7 pandas dataframe