【发布时间】:2015-03-25 16:46:42
【问题描述】:
我正在尝试从“名称”列中获取“性别”列中每个不同值的唯一值。
以下是示例数据: 示例 input_file_data:
index,name,gender,alive
1,Adam,Male,Y
2,Bella,Female,N
3,Marc,Male,Y
1,Adam,Male,N
当我给出与“性别”相对应的值时,我可以得到它,例如,在下面的代码中给出“男性”:
filtered_data = filter(lambda person: person["gender"] == "Male", input_file_data)
reader = (dict((k, v.strip()) for k, v in row.items() if v) for row in filtered_data)
countt = [rec[gender] for rec in reader]
final1 = input_file_name + ".txt", "gender", "Male"
output1 = str(final1).replace("(", "").replace(")", "").replace("'","").replace(", [{", " -- [").replace("}", "")
final2 = set(re.findall(r"name': '(.*?)'", str(filtered_data)))
final_count = len(final2)
output = str(final_count) + " occurrences", str(final2)
output2 = output1, str(output)
output_final = str(output2).replace('\\', "").replace('"',"").replace(']"', "]").replace("set", "").replace("(", "").replace(")", "").replace("'","").replace(", [{", " -- [").replace("}", "")
output_final = output_final + "\n"
当前输出:
input_file_name.txt, gender, Male, 2 occurrences, [Adam,Marc]
预期输出:
input_file_name.txt, gender, Male, 2 occurrences, [Adam,Marc], Female, 1 occurrences [Bella]
应该为每个不同的性别值(没有硬编码)显示所有唯一出现的名称。我也不想使用熊猫。非常感谢任何帮助。
PS- 我有多个文件,并非所有文件都有相同的列。所以我不能对它们进行硬编码。此外,所有文件都有一个“名称”列,但并非所有文件都有一个“性别”列。这个脚本应该适用于任何其他列,如“index”或“alive”或其他任何内容,而不仅仅是性别。
【问题讨论】:
-
为什么不想使用 pandas?它就是为这类事情而设计的。它有一点学习曲线,但绝对值得学习。
-
@acushner 还有几个人将运行这个脚本。他们比我对 Python 更陌生,安装包本身对他们来说是新的。所以我更喜欢坚持默认安装的软件包,如果这有意义的话。
-
这有点道理。但要在熊猫中做你想做的事,基本上是:
df = pd.read_csv(csvfile); print df[df.gender == 'Male']; print df[df.gender == 'Female']。这似乎总体上更容易。但无论哪种方式都有效。 -
另外,另一件事。也许考虑使用 anaconda。默认情况下,它有 pandas 和其他很棒的工具。 store.continuum.io/cshop/anaconda(免费)