将新添加的 csv 文件中的一行追加到 python 中的旧文件
Append a row from newly added csv file to the old one in python
我正在尝试编写一个脚本,该脚本将从新添加到文件夹的 csv 文件中获取特定的列,并将其作为一行添加到旧的 csv 文件中。因此,只要将新的 csv 文件添加到文件夹中,程序就应该执行此脚本,从而产生一个包含许多行的大 csv 文件。
我有一个程序可以将 csv 文件附加到这样的文件中:
path = r'/Users/.../Desktop/files' # use your path
all_files = glob.glob(path + "/*.csv")
li = []
for filename in all_files:
df = pd.read_csv(filename, index_col=None, header=0)
li.append(df)
frame = pd.concat(li, axis=0, ignore_index=True)
frame.to_csv(r'/Users/.../Desktop/files/New.csv', index = False)
但它并没有真正完成全部工作,因为我想要的是新添加文件中的这一行(没有 header):
要附加到此类文件中:
只要将新的 csv 文件拖放到文件夹中,它就会发生,因此也许应该使用 time.sleep()
函数。
我真的希望你能帮忙..当我试图写整个脚本时我完全迷路了..:(
P.S。抱歉啰嗦:/
因此,使用以下数据帧:
import pandas as pd
frame = pd.DataFrame(
{
"ID": ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"],
"col1": [244, 65, 22, 97, 147, 89, 6, 88, 49, 34],
"col2": [122, 43, 12, 87, 100, 70, 3, 54, 18, 82],
}
)
print(frame)
# Output
ID col1 col2
0 A 244 122
1 B 65 43
2 C 22 12
3 D 97 87
4 E 147 100
5 F 89 70
6 G 6 3
7 H 88 54
8 I 49 18
9 J 34 82
old_csv = pd.DataFrame(
{
"Time Point": [1],
"A": [9],
"B": [14],
"C": [219],
"D": [54],
"E": [99],
"F": [78],
"G": [5],
"H": [77],
"I": [65],
"J": [44],
}
)
print(old_csv)
# Output
Time Point A B C D E F G H I J
0 1 9 14 219 54 99 78 5 77 65 44
你可以试试这个:
new_row = pd.DataFrame(frame.loc[:, "col2"]).T.rename(
columns={
k: v for k, v in enumerate(["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"])
}
)
new_csv = pd.concat([old_csv, new_row]).reset_index(drop=True)
new_csv.at[len(old_csv), "Time Point"] = (
len(old_csv) + 1
)
new_csv["Time Point"] = new_csv["Time Point"].astype(int)
print(new_csv)
# Ouput
Time Point A B C D E F G H I J
0 1 9 14 219 54 99 78 5 77 65 44
1 2 122 43 12 87 100 70 3 54 18 82
我正在尝试编写一个脚本,该脚本将从新添加到文件夹的 csv 文件中获取特定的列,并将其作为一行添加到旧的 csv 文件中。因此,只要将新的 csv 文件添加到文件夹中,程序就应该执行此脚本,从而产生一个包含许多行的大 csv 文件。
我有一个程序可以将 csv 文件附加到这样的文件中:
path = r'/Users/.../Desktop/files' # use your path
all_files = glob.glob(path + "/*.csv")
li = []
for filename in all_files:
df = pd.read_csv(filename, index_col=None, header=0)
li.append(df)
frame = pd.concat(li, axis=0, ignore_index=True)
frame.to_csv(r'/Users/.../Desktop/files/New.csv', index = False)
但它并没有真正完成全部工作,因为我想要的是新添加文件中的这一行(没有 header):
要附加到此类文件中:
只要将新的 csv 文件拖放到文件夹中,它就会发生,因此也许应该使用 time.sleep()
函数。
我真的希望你能帮忙..当我试图写整个脚本时我完全迷路了..:(
P.S。抱歉啰嗦:/
因此,使用以下数据帧:
import pandas as pd
frame = pd.DataFrame(
{
"ID": ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"],
"col1": [244, 65, 22, 97, 147, 89, 6, 88, 49, 34],
"col2": [122, 43, 12, 87, 100, 70, 3, 54, 18, 82],
}
)
print(frame)
# Output
ID col1 col2
0 A 244 122
1 B 65 43
2 C 22 12
3 D 97 87
4 E 147 100
5 F 89 70
6 G 6 3
7 H 88 54
8 I 49 18
9 J 34 82
old_csv = pd.DataFrame(
{
"Time Point": [1],
"A": [9],
"B": [14],
"C": [219],
"D": [54],
"E": [99],
"F": [78],
"G": [5],
"H": [77],
"I": [65],
"J": [44],
}
)
print(old_csv)
# Output
Time Point A B C D E F G H I J
0 1 9 14 219 54 99 78 5 77 65 44
你可以试试这个:
new_row = pd.DataFrame(frame.loc[:, "col2"]).T.rename(
columns={
k: v for k, v in enumerate(["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"])
}
)
new_csv = pd.concat([old_csv, new_row]).reset_index(drop=True)
new_csv.at[len(old_csv), "Time Point"] = (
len(old_csv) + 1
)
new_csv["Time Point"] = new_csv["Time Point"].astype(int)
print(new_csv)
# Ouput
Time Point A B C D E F G H I J
0 1 9 14 219 54 99 78 5 77 65 44
1 2 122 43 12 87 100 70 3 54 18 82