从文本文件创建 table 并添加一列
Creating a table from a text file and adding a column
我在从 Python 上创建的 table 添加某些值时遇到了一些问题。
我的文本文件如下所示:
E5345,22/09/2015,C106,815,A,400
E5348,23/09/2015,C109,370,A,200
E5349,25/09/2015,C110,480,A,250
E5353,28/09/2015,C114,272,A,200
E5363,01/10/2015,C124,930,A,500
E5364,02/10/2015,C125,915,A,800
E5365,02/10/2015,C126,1486,A,1486
E5366,03/10/2015,C127,576,E,0
E5367,03/10/2015,C128,427,A,350
E5373,10/10/2015,C134,1023,A,550
我希望使用这些值在 python 上创建一个 table,并创建另一列,标题为未结金额。我设法做到了这一点,但我想找到未偿还的总和。这是通过执行第四列 (finaltotal
) 减去第六列找到的。 (amountpaid
).
到目前为止我的代码是:
headers = ["| Estimate Number", "| Date", "| Customer Number", "| Final Total", "| Status", "| Amount Paid", "| Outstanding Amount"]
print(" ".join(headers))
print ("\n-------------------------------------------------------------------------------------------------------------------------")
data = open("paintingJobs.txt", "r")
info=data.readlines()
data.close()
for li in info:
line = li.strip().split(",")
status=line[4]
finaltotal=int(line[3])
amountpaid=int(line[5])
subtotal = int(line[3]) - int(line[5])
outstanding = (finaltotal) - (amountpaid)
line.append(str(subtotal))
if (amountpaid) < (finaltotal) and status == "A":
for i, word in enumerate(line):
print(word.ljust(len(headers[i - (i > 20)])), end=" " * ((i - (i > 20)) != len(headers) - 1))
print()
print ("-------------------------------------------------------------------------------------------------------------------------")
print ("\nThe total revenue is")
我的理想输出是:
| Estimate Number | Date | Customer Number | Final Total | Status | Amount Paid | Outstanding Amount
-------------------------------------------------------------------------------------------------------------------------
E5345 22/09/2015 C106 815 A 400 415
-------------------------------------------------------------------------------------------------------------------------
E5348 23/09/2015 C109 370 A 200 170
-------------------------------------------------------------------------------------------------------------------------
E5349 25/09/2015 C110 480 A 250 230
-------------------------------------------------------------------------------------------------------------------------
E5353 28/09/2015 C114 272 A 200 72
-------------------------------------------------------------------------------------------------------------------------
E5355 29/09/2015 C116 530 A 450 80
-------------------------------------------------------------------------------------------------------------------------
E5363 01/10/2015 C124 930 A 500 430
-------------------------------------------------------------------------------------------------------------------------
E5364 02/10/2015 C125 915 A 800 115
-------------------------------------------------------------------------------------------------------------------------
E5367 03/10/2015 C128 427 A 350 77
-------------------------------------------------------------------------------------------------------------------------
E5373 10/10/2015 C134 1023 A 550 473
-------------------------------------------------------------------------------------------------------------------------
The total outstanding is
£2062
总数 outstanding
是通过计算 outstanding
金额的总和得出的。未结金额等于 finaltotal
减去 amountpaid
。任何帮助将不胜感激。
只需在循环外使用一个变量来跟踪总数。我排除了多付的人,但如果你想从总数中扣除,你可以删除 if
语句。
total = 0
for li in info:
...
outstanding = (finaltotal) - (amountpaid)
if outstanding > 0:
total += outstanding
print 'The total outstanding is {}'.format(total)
为什么不使用 Pandas 库?假设您的初始 table 在名为 example.csv
的 csv 文件中。您可以通过很少的步骤完成此操作,如下所示:
from pandas import read_csv
df = read_csv('~/Documents/example.csv', header=None)
df.columns = ["Estimate Number", "Date", "Customer Number", "Final Total", "Status", "Amount Paid"]
df['Outstanding Amount'] = df['Final Total'] - df['Amount Paid']
然后您可以选择输出。您可以输出回 csv 文件:
df.to_csv()
或打印出来:
table_as_text = df.to_string()
print(table_as_text)
这会给你:
Estimate Number Date Customer Number Final Total Status Amount Paid Outstanding Amount
0 E5345 22/09/2015 C106 815 A 400 415
1 E5348 23/09/2015 C109 370 A 200 170
2 E5349 25/09/2015 C110 480 A 250 230
3 E5353 28/09/2015 C114 272 A 200 72
4 E5363 01/10/2015 C124 930 A 500 430
5 E5364 02/10/2015 C125 915 A 800 115
6 E5365 02/10/2015 C126 1486 A 1486 0
7 E5366 03/10/2015 C127 576 E 0 576
8 E5367 03/10/2015 C128 427 A 350 77
9 E5373 10/10/2015 C134 1023 A 550 473
要计算总和,您可以这样做:
outstanding_amount = df["Outstanding Amount"].sum()
print(outstanding_amount)
查看 http://pandas.pydata.org/pandas-docs/stable。希望对您有所帮助!
我在从 Python 上创建的 table 添加某些值时遇到了一些问题。
我的文本文件如下所示:
E5345,22/09/2015,C106,815,A,400
E5348,23/09/2015,C109,370,A,200
E5349,25/09/2015,C110,480,A,250
E5353,28/09/2015,C114,272,A,200
E5363,01/10/2015,C124,930,A,500
E5364,02/10/2015,C125,915,A,800
E5365,02/10/2015,C126,1486,A,1486
E5366,03/10/2015,C127,576,E,0
E5367,03/10/2015,C128,427,A,350
E5373,10/10/2015,C134,1023,A,550
我希望使用这些值在 python 上创建一个 table,并创建另一列,标题为未结金额。我设法做到了这一点,但我想找到未偿还的总和。这是通过执行第四列 (finaltotal
) 减去第六列找到的。 (amountpaid
).
到目前为止我的代码是:
headers = ["| Estimate Number", "| Date", "| Customer Number", "| Final Total", "| Status", "| Amount Paid", "| Outstanding Amount"]
print(" ".join(headers))
print ("\n-------------------------------------------------------------------------------------------------------------------------")
data = open("paintingJobs.txt", "r")
info=data.readlines()
data.close()
for li in info:
line = li.strip().split(",")
status=line[4]
finaltotal=int(line[3])
amountpaid=int(line[5])
subtotal = int(line[3]) - int(line[5])
outstanding = (finaltotal) - (amountpaid)
line.append(str(subtotal))
if (amountpaid) < (finaltotal) and status == "A":
for i, word in enumerate(line):
print(word.ljust(len(headers[i - (i > 20)])), end=" " * ((i - (i > 20)) != len(headers) - 1))
print()
print ("-------------------------------------------------------------------------------------------------------------------------")
print ("\nThe total revenue is")
我的理想输出是:
| Estimate Number | Date | Customer Number | Final Total | Status | Amount Paid | Outstanding Amount
-------------------------------------------------------------------------------------------------------------------------
E5345 22/09/2015 C106 815 A 400 415
-------------------------------------------------------------------------------------------------------------------------
E5348 23/09/2015 C109 370 A 200 170
-------------------------------------------------------------------------------------------------------------------------
E5349 25/09/2015 C110 480 A 250 230
-------------------------------------------------------------------------------------------------------------------------
E5353 28/09/2015 C114 272 A 200 72
-------------------------------------------------------------------------------------------------------------------------
E5355 29/09/2015 C116 530 A 450 80
-------------------------------------------------------------------------------------------------------------------------
E5363 01/10/2015 C124 930 A 500 430
-------------------------------------------------------------------------------------------------------------------------
E5364 02/10/2015 C125 915 A 800 115
-------------------------------------------------------------------------------------------------------------------------
E5367 03/10/2015 C128 427 A 350 77
-------------------------------------------------------------------------------------------------------------------------
E5373 10/10/2015 C134 1023 A 550 473
-------------------------------------------------------------------------------------------------------------------------
The total outstanding is
£2062
总数 outstanding
是通过计算 outstanding
金额的总和得出的。未结金额等于 finaltotal
减去 amountpaid
。任何帮助将不胜感激。
只需在循环外使用一个变量来跟踪总数。我排除了多付的人,但如果你想从总数中扣除,你可以删除 if
语句。
total = 0
for li in info:
...
outstanding = (finaltotal) - (amountpaid)
if outstanding > 0:
total += outstanding
print 'The total outstanding is {}'.format(total)
为什么不使用 Pandas 库?假设您的初始 table 在名为 example.csv
的 csv 文件中。您可以通过很少的步骤完成此操作,如下所示:
from pandas import read_csv
df = read_csv('~/Documents/example.csv', header=None)
df.columns = ["Estimate Number", "Date", "Customer Number", "Final Total", "Status", "Amount Paid"]
df['Outstanding Amount'] = df['Final Total'] - df['Amount Paid']
然后您可以选择输出。您可以输出回 csv 文件:
df.to_csv()
或打印出来:
table_as_text = df.to_string()
print(table_as_text)
这会给你:
Estimate Number Date Customer Number Final Total Status Amount Paid Outstanding Amount
0 E5345 22/09/2015 C106 815 A 400 415
1 E5348 23/09/2015 C109 370 A 200 170
2 E5349 25/09/2015 C110 480 A 250 230
3 E5353 28/09/2015 C114 272 A 200 72
4 E5363 01/10/2015 C124 930 A 500 430
5 E5364 02/10/2015 C125 915 A 800 115
6 E5365 02/10/2015 C126 1486 A 1486 0
7 E5366 03/10/2015 C127 576 E 0 576
8 E5367 03/10/2015 C128 427 A 350 77
9 E5373 10/10/2015 C134 1023 A 550 473
要计算总和,您可以这样做:
outstanding_amount = df["Outstanding Amount"].sum()
print(outstanding_amount)
查看 http://pandas.pydata.org/pandas-docs/stable。希望对您有所帮助!