下面是我的两个csv文件:
CSV1:
Class DTWC DR DW IDFP IDS ISQLQ IGS LIC LT MIM NLMR PD RAM SL UC LazyClass
com.onegravity.colorpicker.demo.MainActivity 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0
com.onegravity.colorpicker.demo.SettingsActivity 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
com.onegravity.colorpicker.AlphaPatternDrawable 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0
com.onegravity.colorpicker.ColorPickerDialog 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
CSV2:
Push Down Attribute Move Class Rename Class Move and Rename Class Extract and Move Method Move Source Folder Change Package Extract Variable Rename Attribute Move and Rename Attribute Replace Variable with Attribute Replace Attribute Merge Variable Merge Parameter Merge Attribute split Variable split Parameter Split Attribute Class
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 com.onegravity.colorpicker.AlphaPatternDrawable
我需要合并它们,所以我使用了以下代码:
import pandas as pd
a = pd.read_csv("filea.csv")
b = pd.read_csv("fileb.csv")
b = b.dropna(axis=1)
merged = a.merge(b, on='Class')
merged.to_csv("output.csv", index=False)
第二个csv文件不包含所有类的问题,它仅包含一个类,因此我需要将第二个csv合并到第三行中,并在其余行中放入0。
感谢帮助!
答案 0 :(得分:1)
您需要对merge命令使用某些选项。
在这种情况下...
merged = a.merge(b, on='Class', how='left')
how='left'
意味着只保留“左侧”数据框中存在的键。
匹配的行以外的行将缺少值,因此您将需要使用fillna()将其替换为零
merged = merged.fillna(0)
...在写入CSV之前。
答案 1 :(得分:0)
我看到的第一个问题是您试图读取CSV而不显示分隔符。默认情况下为',',但您使用空格。读取文件时使用n = int(input())
s = str(input())
j, i = n // 2, n // 2 + 1
# debug
# print(f'initial \n x = {j}, y = {i}')
while (j > 0 and s[j] == '0'):
j-=1
while (i < n and s[i] == '0'):
i+=1
# debug
# print(f'final\n x = {j}, y = {i}')
if j==0:
print(int(s[0:i]) + int(s[i:n]))
print('statement1')
elif i==n:
print( int(s[0:j]) + int(s[j:n]))
print('statement2')
else:
print(min( int(s[:i])+ int(s[i:]), int(s[:j]) + int(s[j:])))
选项可以解决此问题。
另一个问题是每列的名称。两个文件中的属性sep='\s+'
不同。我们可以使用Class
和left_on
参数来解决此问题。
right_on